LyoKICogTkRBIEFORCBORUVELVRPLUtOT1cgUkVRVUlSRUQKICoKICogQ29weXJpZ2h0IKkgMjAxMy0yMDE4IFN5bmFwdGljcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFRoaXMgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiB0aGF0IGlzIHByb3ByaWV0YXJ5IHRvIFN5bmFwdGljcwogKiBJbmNvcnBvcmF0ZWQgKCJTeW5hcHRpY3MiKS4gVGhlIGhvbGRlciBvZiB0aGlzIGZpbGUgc2hhbGwgdHJlYXQgYWxsCiAqIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gYXMgY29uZmlkZW50aWFsLCBzaGFsbCB1c2UgdGhlCiAqIGluZm9ybWF0aW9uIG9ubHkgZm9yIGl0cyBpbnRlbmRlZCBwdXJwb3NlLCBhbmQgc2hhbGwgbm90IGR1cGxpY2F0ZSwKICogZGlzY2xvc2UsIG9yIGRpc3NlbWluYXRlIGFueSBvZiB0aGlzIGluZm9ybWF0aW9uIGluIGFueSBtYW5uZXIKICogdW5sZXNzIFN5bmFwdGljcyBoYXMgb3RoZXJ3aXNlIHByb3ZpZGVkIGV4cHJlc3MsIHdyaXR0ZW4KICogcGVybWlzc2lvbi4KICoKICogVXNlIG9mIHRoZSBtYXRlcmlhbHMgbWF5IHJlcXVpcmUgYSBsaWNlbnNlIG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eQogKiBmcm9tIGEgdGhpcmQgcGFydHkgb3IgZnJvbSBTeW5hcHRpY3MuIFRoaXMgZmlsZSBjb252ZXlzIG5vIGV4cHJlc3MKICogb3IgaW1wbGllZCBsaWNlbnNlcyB0byBhbnkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBiZWxvbmdpbmcKICogdG8gU3luYXB0aWNzLgogKgogKiBJTkZPUk1BVElPTiBDT05UQUlORUQgSU4gVEhJUyBET0NVTUVOVCBJUyBQUk9WSURFRCAiQVMtSVMsIiBBTkQKICogU1lOQVBUSUNTIEVYUFJFU1NMWSBESVNDTEFJTVMgQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUywKICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgogKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIEFOWSBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQgT0YgQU5ZCiAqIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFNZTkFQVElDUyBCRSBMSUFCTEUKICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBQVU5JVElWRSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFCiAqIE9GIFRIRSBJTkZPUk1BVElPTiBDT05UQUlORUQgSU4gVEhJUyBET0NVTUVOVCwgSE9XRVZFUiBDQVVTRUQgQU5ECiAqIEJBU0VEIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICogTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFORCBFVkVOIElGIFNZTkFQVElDUyBXQVMKICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIElGIEEgVFJJQlVOQUwgT0YKICogQ09NUEVURU5UIEpVUklTRElDVElPTiBET0VTIE5PVCBQRVJNSVQgVEhFIERJU0NMQUlNRVIgT0YgRElSRUNUCiAqIERBTUFHRVMgT1IgQU5ZIE9USEVSIERBTUFHRVMsIFNZTkFQVElDUycgVE9UQUwgQ1VNVUxBVElWRSBMSUFCSUxJVFkKICogVE8gQU5ZIFBBUlRZIFNIQUxMIE5PVCBFWENFRUQgT05FIEhVTkRSRUQgVS5TLiBET0xMQVJTLgogKi8KLy8gVXNlIG9mIHRoaXMgc2FtcGxlIHNvdXJjZSBjb2RlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNaWNyb3NvZnQKLy8gbGljZW5zZSBhZ3JlZW1lbnQgdW5kZXIgd2hpY2ggeW91IGxpY2Vuc2VkIHRoaXMgc2FtcGxlIHNvdXJjZSBjb2RlLiBJZgovLyB5b3UgZGlkIG5vdCBhY2NlcHQgdGhlIHRlcm1zIG9mIHRoZSBsaWNlbnNlIGFncmVlbWVudCwgeW91IGFyZSBub3QKLy8gYXV0aG9yaXplZCB0byB1c2UgdGhpcyBzYW1wbGUgc291cmNlIGNvZGUuIEZvciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UsCi8vIHBsZWFzZSBzZWUgdGhlIGxpY2Vuc2UgYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBNaWNyb3NvZnQgb3IsIGlmIGFwcGxpY2FibGUsCi8vIHNlZSB0aGUgTElDRU5TRS5SVEYgb24geW91ciBpbnN0YWxsIG1lZGlhIG9yIHRoZSByb290IG9mIHlvdXIgdG9vbHMgaW5zdGFsbGF0aW9uLgovLyBUSEUgU0FNUExFIFNPVVJDRSBDT0RFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEggTk8gV0FSUkFOVElFUyBPUiBJTkRFTU5JVElFUy4KLy8KLy8KLy8gKEMpIENvcHlyaWdodCAyMDA2IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCi8vIEFsbCBSaWdodHMgUmVzZXJ2ZWQKCiNpZm5kZWYgX19TRE1NQ19BUElfSF9fCiNkZWZpbmUgX19TRE1NQ19BUElfSF9fCgojZGVmaW5lIFNESU9fQkxLX1NJWkUgICAgNTEyCgp0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIGludCAJVlVJTlQzMl9UOwp0eXBlZGVmIHVuc2lnbmVkIGludCAJCSAgIAlVSU5UMzJfVDsKdHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgIAlWVUlOVF9UOwp0eXBlZGVmIHVuc2lnbmVkIGludCAJCSAgIAlVSU5UX1Q7CnR5cGVkZWYgaW50CQkJIAkJICAgCUlOVF9UOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IAkJICAgCVVJTlQxNl9ULCBVU0hPUlQ7CnR5cGVkZWYgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgVlVJTlQxNl9UOwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgCQkJVUlOVDhfVDsKdHlwZWRlZiBjaGFyCQkgCQkJSU5UOF9UOwoKLy8gRE1BIG9yIFBJTyBtb2RlCiNkZWZpbmUgU0RJT19ETUEJMQojaWZuZGVmCURJU0FCTEVfRU1NQ19JTlRfTU9ERQojZGVmaW5lIF9fU0RJT19JTlRfTU9ERV9fCiNlbmRpZiAvL0RJU0FCTEVfRU1NQ19JTlRfTU9ERQoKI2RlZmluZSBHRVRfUF9VSU5UKFApCSgodW5zaWduZWQgaW50KilQKQoKI2RlZmluZSBTRElPX1JEX0JVRgkJMHhBMDAwMDAKI2RlZmluZSBTRElPX1dEX0JVRgkJMHhCMDAwMDAKI2RlZmluZSBTRElPX0FETUFfUlhERVNDX0JBU0UgMHhDMDAwMDAKI2RlZmluZSBTRElPX0FETUFfVFhERVNDX0JBU0UgMHhDODAwMDAKI2RlZmluZQlTRElPX0JPT1RfQlVGCTB4QTAwMDAwCiNkZWZpbmUgU0RJT182NEtfQk9VTkRBUlkgMHgxMDAwMAojZGVmaW5lIFNESU9fQ0FSRF9QUkVTRU5UX0JJVCAweDQwMDAwCgoKLyoqCiAqIEdlbmVyYWwgZXJyb3IgY29kZSBkZWZpbml0aW9ucwkJCTB4MCAtIDB4MUYKICoqLwojZGVmaW5lIE5vRXJyb3IgICAgICAgICAgICAJCQkJCTB4MAojZGVmaW5lIE5vdEZvdW5kRXJyb3IgICAgICAJCQkJCTB4MQojZGVmaW5lIEdlbmVyYWxFcnJvciAgICAgICAJCQkJCTB4MgojZGVmaW5lIFdyaXRlRXJyb3IgICAgICAgICAJCQkJCTB4MwojZGVmaW5lIFJlYWRFcnJvcgkJICAgCQkJCQkweDQKI2RlZmluZSBOb3RTdXBwb3J0ZWRFcnJvciAgCQkJCQkweDUKI2RlZmluZSBJbnZhbGlkUGxhdGZvcm1Db25maWdFcnJvcgkJCTB4NgojZGVmaW5lIFBsYXRmb3JtQnVzeQkJCQkJCTB4NwojZGVmaW5lIFBsYXRmb3JtUmVhZHkJCQkJCQkweDgKI2RlZmluZSBJbnZhbGlkU2l6ZUVycm9yCQkJCQkweDkKCi8vIEZsYXNoIFJlbGF0ZWQgRXJyb3JzIAkJCQkJMHgyMCAtIDB4M0YKI2RlZmluZSBFcmFzZUVycm9yCQkgCQkJCQkweDIwCiNkZWZpbmUgUHJvZ3JhbUVycm9yCQkJCQkJMHgyMQojZGVmaW5lIEludmFsaWRCb290VHlwZUVycm9yCQkJCTB4MjIKI2RlZmluZSBQcm90ZWN0aW9uUmVnUHJvZ3JhbUVycm9yCQkJMHgyMwojZGVmaW5lIE5vT1RQRm91bmQJCQkJCQkJMHgyNAojZGVmaW5lIEJCVFJlYWRFcnJvcgkJCQkJCTB4MjUKI2RlZmluZSBNRE9DSW5pdEZhaWxlZAkJCQkJCTB4MjYKI2RlZmluZSBPbmVOYW5kSW5pdEZhaWxlZCAgICAgICAgICAgICAgICAgICAweDI3CiNkZWZpbmUgTURPQ0Zvcm1hdEZhaWxlZCAgICAgICAgICAgICAgICAgICAgMHgyOAojZGVmaW5lIEJCVEV4aGF1c3RlZEVycm9yICAgICAgICAgICAgICAgICAgIDB4MjkKI2RlZmluZSBGbGFzaERyaXZlckluaXRFcnJvciAgICAgICAgICAgICAgICAweDMwCiNkZWZpbmUgRmxhc2hGdW5jTm90RGVmaW5lZAkJCQkJMHgzMQojZGVmaW5lIE9UUEVycm9yCQkJCQkJCTB4MzIKI2RlZmluZSBJbnZhbGlkQWRkcmVzc1JhbmdlRXJyb3IJCQkweDMzCiNkZWZpbmUgRmxhc2hMb2NrRXJyb3IJCQkJCQkweDM0CiNkZWZpbmUgUmVhZERpc3R1cmJFcnJvcgkJCQkJMHgzNQoKI2RlZmluZSBUaW1lT3V0RXJyb3IJCQkJCQkweDk2CgoKI2RlZmluZSBTZGlvQ2FyZFJlc3BvbnNlUjVFcnJvcgkJCQkweDk5CgovLyBTRE1NQyBFcnJvcnMgCQkJCQkJCTB4RDAtMHhFMgojZGVmaW5lIFNETU1DX1NXSVRDSF9FUlJPUgkgCQkJCTB4RDAKI2RlZmluZSBTRE1NQ19FUkFTRV9SRVNFVF9FUlJPUgkgCQkJMHhEMQojZGVmaW5lIFNETU1DX0NJRENTRF9PVkVSV1JJVEVfRVJST1IJCTB4RDIKI2RlZmluZSBTRE1NQ19PVkVSUlVOX0VSUk9SIAkJCQkweEQzCiNkZWZpbmUgU0RNTUNfVU5ERVJVTl9FUlJPUiAJCQkJMHhENAojZGVmaW5lIFNETU1DX0dFTkVSQUxfRVJST1IgCQkJCTB4RDUKI2RlZmluZSBTRE1NQ19DQ19FUlJPUiAJCQkJCQkweEQ2CiNkZWZpbmUgU0RNTUNfRUNDX0VSUk9SIAkJCQkJMHhENwojZGVmaW5lIFNETU1DX0lMTF9DTURfRVJST1IgCQkJCTB4RDgKI2RlZmluZSBTRE1NQ19DT01fQ1JDX0VSUk9SCQkJCQkweEQ5CiNkZWZpbmUgU0RNTUNfTE9DS19VTE9DS19FUlJST1IJCQkJMHhEQQojZGVmaW5lIFNETU1DX0xPQ0tfRVJST1IgCQkJCQkweERCCiNkZWZpbmUgU0RNTUNfV1BfRVJST1IgCQkJCQkJMHhEQwojZGVmaW5lIFNETU1DX0VSQVNFX1BBUkFNX0VSUk9SCQkJCTB4REQKI2RlZmluZSBTRE1NQ19FUkFTRV9TRVFfRVJST1IJCQkJMHhERQojZGVmaW5lIFNETU1DX0JMS19MRU5fRVJST1IgCQkJCTB4REYKI2RlZmluZSBTRE1NQ19BRERSX01JU0FMSUdOX0VSUk9SIAkJCTB4RTAKI2RlZmluZSBTRE1NQ19BRERSX1JBTkdFX0VSUk9SIAkJCQkweEUxCiNkZWZpbmUgU0RNTUNEZXZpY2VOb3RSZWFkeUVycm9yCQkJMHhFMgojZGVmaW5lIFNETU1DSW5pdGlhbGl6YXRpb25FcnJvcgkJCTB4RTMKI2RlZmluZSBTRE1NQ0RldmljZVZvbHRhZ2VOb3RTdXBwb3J0ZWQJCTB4RTQKCi8vIEdsb2JhbHMKI2RlZmluZSBFTkFCTEVfUEFSVElUSU9OX1NVUFBPUlQJMAoKI2RlZmluZSBPU0NSX09GRlNFVCAgICAgICAgIAkJMHgxMAojZGVmaW5lIEJPT0wgICAgICAgICAgICAgICAgCQlpbnQKI2RlZmluZSBPQ1JfQVJHICAgICAgICAgICAgIAkJMHg4MEZGODAwMAojZGVmaW5lIFNEX09DUl9BUkcgICAgICAgICAgCQkweDQwRkY4MDAwCiNkZWZpbmUgT0NSX0FDQ0VTU19NT0RFX01BU0sJCTB4NjAwMDAwMDAKCiNkZWZpbmUgUkVTUE9OU0VfTEVOR1RIICAgICAJCTgKI2RlZmluZSBSMl9CWVRFX0xFTkdUSAkJCQkxNgojZGVmaW5lIE1NQ19CVVNZX0JJVCAgICAgICAgCQkweDgwMDAwMDAwCiNkZWZpbmUgU0RfTk9fQ01EMSAgICAgICAgICAJCTB4MzAwCiNkZWZpbmUgTE9XX0FSRyAgICAgICAgICAgICAJCTB4MDAwMGZmZmYKI2RlZmluZSBOT19GTEFHUyAgICAgICAgICAgIAkJMAojZGVmaW5lIEJMS19DTlQgICAgICAgICAgICAgCQkxCiNkZWZpbmUgQkxLX0xFTiAgICAgICAgICAgICAJCTUxMgojZGVmaW5lCVNEVkhTXzJfN19UT18zXzYJIAkJMHgxCiNkZWZpbmUJU0RWSFNfTE9XX1ZPTFQJCSAJCTB4MgojZGVmaW5lCVNEVkhTQVJHU0hJRlQJCQkJOAojZGVmaW5lIFNEVkhTQ0hFQ0tQQVRURVJOCQkJMHgzMwojZGVmaW5lIEhBUkQ1MTJCTE9DS0xFTkdUSAkJCTUxMgojZGVmaW5lIFBBUlRJVElPTk1BU0sJCQkJMHhGCiNkZWZpbmUgTU1DX1NEX0JPT1RfUEFSVElUSU9OCQkxCiNkZWZpbmUgTU1DX1NEX0JPT1RfUEFSVElUSU9OMgkJMgojZGVmaW5lIE1NQ19TRF9VU0VSX1BBUlRJVElPTgkJMAojZGVmaW5lIFNDUlNEMUJJVE1PREUgCQkJCTB4MQojZGVmaW5lIFNDUlNENEJJVE1PREUgCQkJCTB4NQojZGVmaW5lIFNEX0NNRDZfNEJJVE1PREUgCQkJMgojZGVmaW5lIFIxX0xPQ0tFRENBUkRNQVNLCQkJMHhGREZGRkZGRgojZGVmaW5lIFIxX05PTUFTSwkJCQkJMHhGRkZGRkZGRgojZGVmaW5lIFVSR0VOVF9CS09QUwkJCQkweDAwMDAwMDQwCgovLyBNTUMgQ29udHJvbGxlciBzZWxlY3Rpb25zCnR5cGVkZWYgZW51bQp7CglNTUNOT1RFTkFCTEVECQkgPSAgMCwKCU1NQ0xFR0FDWUNPTlRST0xMRVIxID0JMSwKCU1NQ0xFR0FDWUNPTlRST0xMRVIyID0JMiwKCU1NNENPTlRST0xMRVIwIAkJID0JMywKCU1NNENPTlRST0xMRVIxIAkJID0JNCwKCU1NNENPTlRST0xMRVIyIAkJID0JNSwKfUNPTlRST0xMRVJfVFlQRTsKCmVudW0KewoJWExMUF9NTUMgPSAwLAoJWExMUF9TRCA9MSwKCVhMTFBfZVNEID0gMgp9OwoKdHlwZWRlZgllbnVtCnsKICAgIFhMTFBfTU1DX0NNRDAgICAgICAgICAgICAgICA9IDB4MCwJLy8gZ28gaWRsZSBzdGF0ZQogICAgWExMUF9NTUNfQ01EMSAgICAgICAgICAgICAgID0gMHgxLAkvLyBzZW5kIG9wIGNvbW1hbmQKICAgIFhMTFBfTU1DX0NNRDIgICAgICAgICAgICAgICA9IDB4MiwJLy8gYWxsIHNlbmQgY2lkCiAgICBYTExQX01NQ19DTUQzICAgICAgICAgICAgICAgPSAweDMsCS8vIHNldCByZWxhdGl2ZSBhZGRyCiAgICBYTExQX01NQ19DTUQ0ICAgICAgICAgICAgICAgPSAweDQsCS8vIHNldCBkc3IKICAgIFhMTFBfTU1DX0NNRDUgICAgICAgICAgICAgICA9IDB4NSwgIC8vIFNMRUVQL0FXQUtFCiAgICBYTExQX01NQ19DTUQ3ICAgICAgICAgICAgICAgPSAweDcsCSAvLyBzZWxlY3QvZGVzZWxlY3QgY2FyZAogICAgWExMUF9TRF9DTUQ2CQkJCT0gMHg2LCAJIC8vIFNEIFN3aXRjaCBGdW5jdGlvbiBDb21tYW5kCiAgICBYTExQX01NQ19DTUQ2CQkJCT0gMHg2LCAJLy8gTU1DIFN3aXRjaCBGdW5jdGlvbiBDb21tYW5kCglYTExQX1NEX0FDTUQ2CQkJCT0gMHg2LAkvLyBTRCBBQ01EIENvbW1hbmQgZm9yIFNFVF9CVVNfV0lEVEgKICAgIFhMTFBfU0RfQ01EOCAgICAgICAgICAgICAgIAk9IDB4OCwJIC8vIFNEIENhcmQgSW50ZXJmYWNlIENvbmRpdGlvbgogICAgWExMUF9NTUNfQ01EOAkJCQk9IDB4OCwJLy8gTU1DIHJlcXVlc3QgdG8gcmVhZCBFWFQgQ1NECiAgICBYTExQX01NQ19DTUQ5ICAgICAgICAgICAgIAk9IDB4OSwJLy8gc2VuZCBjc2QKICAgIFhMTFBfTU1DX0NNRDEwICAgICAgICAgICAgCT0gMHhhLAkvLyBzZW5kIGNpZAogICAgWExMUF9NTUNfQ01EMTEgICAgICAgICAgICAgID0gMHhiLAkvLyAgcmVhZCBkYXRhIHVudGlsIHN0b3AKICAgIFhMTFBfTU1DX0NNRDEyICAgICAgICAgICAgICA9IDB4YywJIC8vIHN0b3AgdHJhbnNtaXNzaW9uCiAgICBYTExQX01NQ19DTUQxMyAgICAgICAgICAgICAgPSAweGQsCSAvLyBzZW5kIHN0YXR1cwogICAgWExMUF9NTUNfQ01EMTUgICAgICAgICAgICAgID0gMHhmLAkvLyBnbyBpbmFjdGl2ZSBzdGF0ZQogICAgWExMUF9NTUNfQ01EMTYgICAgICAgICAgICAgID0gMHgxMCwJLy8gIHNldCBibG9jayBsZW5ndGgKICAgIFhMTFBfTU1DX0NNRDE3ICAgICAgICAgICAgICA9IDB4MTEsCS8vIHJlYWQgc2luZ2xlIGJsb2NrCiAgICBYTExQX01NQ19DTUQxOCAgICAgICAgICAgICAgPSAweDEyLAkvLyAgcmVhZCBtdWx0aXBsZSBibG9jawogICAgWExMUF9TRF9DTUQxOQkJCQk9IDB4MTMsCS8vCVVIU0kgVHVuaW5nCiAgICBYTExQX01NQ19DTUQyMCAgICAgICAgICAgICAgPSAweDE0LAkgLy8gd3JpdGUgZGF0YSB1bnRpbCBzdG9wCiAgICBYTExQX01NQ19DTUQyMSAgICAgICAgICAgICAgPSAweDE1LAkgLy8gZU1NQyBVSFNJIFR1bmluZwoJWExMUF9NTUNfQ01EMjMgICAgICAgICAgICAJPSAweDE3LAkgLy8gU2V0IEJsb2NrIENvdW50CiAgICBYTExQX01NQ19DTUQyNCAgICAgICAgICAgIAk9IDB4MTgsCSAvLyB3cml0ZSBibG9jawogICAgWExMUF9NTUNfQ01EMjUgICAgICAgICAgICAgID0gMHgxOSwJIC8vIHdyaXRlIG11bHRpcGxlIGJsb2NrCiAgICBYTExQX01NQ19DTUQyNiAgICAgICAgICAgICAgPSAweDFhLAkvLyBwcm9ncmFtIENJRAogICAgWExMUF9NTUNfQ01EMjcgICAgICAgICAgICAJPSAweDFiLAkvLyBwcm9ncmFtIENTRAogICAgWExMUF9NTUNfQ01EMjggICAgICAgICAgICAJPSAweDFjLAkvLyBzZXQgd3JpdGUgcHJvdAogICAgWExMUF9NTUNfQ01EMjkgICAgICAgICAgICAJPSAweDFkLCAgLy8gY2xyIHdyaXRlIHByb3QKICAgIFhMTFBfTU1DX0NNRDMwICAgICAgICAgICAgCT0gMHgxZSwJLy8gc2VuZCB3cml0ZSBwcm90CiAgICBYTExQX1NEX0NNRDMyICAgICAgICAgICAgCT0gMHgyMCwJIC8vIHRhZyBzZWN0b3Igc3RhcnQKICAgIFhMTFBfU0RfQ01EMzMgICAgICAgICAgICAJPSAweDIxLAkvLyB0YWcgc2VjdG9yIGVuZAogICAgWExMUF9TRF9DTUQzOCAgICAgICAgICAgIAk9IDB4MjYsCSAvLyBlcmFzZQogICAgWExMUF9NTUNfQ01EMzQgICAgICAgICAgICAJPSAweDIyLAkvLyB1bnRhZyBzZWN0b3IKICAgIFhMTFBfTU1DX0NNRDM1ICAgICAgICAgICAgCT0gMHgyMywJLy8gdGFnIGVyYXNlIGdyb3VwIHN0YXJ0CiAgICBYTExQX01NQ19DTUQzNiAgICAgICAgICAgIAk9IDB4MjQsCS8vICB0YWcgZXJhc2UgZ3JvdXAgZW5kCiAgICBYTExQX01NQ19DTUQzNyAgICAgICAgICAgIAk9IDB4MjUsCSAvLyB1bnRhZyBlcmFzZSBncm91cAoJWExMUF9lU0RfQ01EMzcJCQkJPSAweDI1LCAgLy8gU0QgUGFydGl0aW9uTWFuYWdlbWVudCBncm91cCBDb21tYW5kCiAgICBYTExQX2VTRF9DTUQ1NwkJCQk9IDB4MzksCiAgICBYTExQX01NQ19DTUQzOCAgICAgICAgICAgIAk9IDB4MjYsCSAvLyBlcmFzZQogICAgWExMUF9NTUNfQ01EMzkgICAgICAgICAgICAgID0gMHgyNywJLy9mYXN0IElPCiAgICBYTExQX01NQ19DTUQ0MCAgICAgICAgICAgICAgPSAweDI4LAkvLyBnbyBpcnEgc3RhdGUKICAgIFhMTFBfTU1DX0NNRDQyICAgICAgICAgICAgCT0gMHgyYSwJLy8gbG9jay11bmxvY2sKICAgIFhMTFBfZVNEX0NNRDQzCQkJCT0gMHgyYiwgLy8gU2VsZWN0IFBhcnRpdGlvbgogICAgWExMUF9TRF9DTUQ1NSAgICAgICAgICAgICAgCT0gMHgzNywJLy8gYXBwIGNtZAogICAgWExMUF9NTUNfQ01ENTYgICAgICAgICAgICAJPSAweDM4LAkvLyAgZ2VuIGNtZAogICAgWExMUF9TUElfQ01ENTggICAgICAgICAgICAgID0gMHgzYSwJIC8vIHJlYWQgb2NyCiAgICBYTExQX1NQSV9DTUQ1OSAgICAgICAgICAgICAgPSAweDNiLAkgLy8gY3JjIG9uLW9mZgogICAgWExMUF9TRF9BQ01ENDEJICAgICAgICAgICAgPSAweDI5LAogICAgWExMUF9TRF9BQ01EMTMgICAgICAJICAgID0gMHgwZCwJICAvLyBSZWFkIFNEIFN0YXR1cwovKiAjaWZuZGVmIElPX0NBUkRfU1VQUE9SVAogICAgWExMUF9TRF9BQ01ENTEgICAgICAJICAgID0gMHgzMwkgIC8vIFJlYWQgU0QgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoU0NSKQojZWxzZSovCiAgICBYTExQX1NEX0FDTUQ1MSAgICAgIAkgICAgPSAweDMzLAkgIC8vIFJlYWQgU0QgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoU0NSKQogICAgWExMUF9TRElPX0NNRDUJCQkJPSAweDA1LAkvL1NhdHlhCiAgICBYTExQX1NESU9fQ01ENTIJCQkJPSAweDM0LAogICAgWExMUF9TRElPX0NNRDUzCQkJCT0gMHgzNQovLyNlbmRpZgp9IFhMTFBfTU1DX0NNRDsKCnR5cGVkZWYgc3RydWN0CnsKCVVJTlRfVAkJQ0lEX1ZBTFVFWzRdOwoJVUlOVF9UCQlTZXJpYWxOdW07Cn0gQ0lEX0xBWU9VVDsKCnR5cGVkZWYgc3RydWN0CnsKCVVJTlRfVAkJQ1NEX1ZBTFVFWzRdOwp9IENTRF9MQVlPVVQ7Cgp0eXBlZGVmIHN0cnVjdAp7CglVSU5UX1QJCVNEX1ZBTFVFWzRdOwp9IFNEX0xBWU9VVDsKCnR5cGVkZWYgc3RydWN0CnsKCVVJTlRfVAkJU0NSX1ZBTFVFWzJdOwp9IFNDUl9MQVlPVVQ7CgovLyBDSUQ6IGNhcmQgaWRlbnRpZmljYXRpb24oMTI4IGJpdHMgPSAxNiBieXRlcykKdHlwZWRlZiBzdHJ1Y3QgICAgICAvLyBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGFueSB3b3JkIGFsbGlnbWVudCBpc3N1ZS4KewogICAgdW5zaWduZWQgY2hhciAgIG1hbnVmYWN0dXJlSUQ7CiAgICBjaGFyICAgICAgICAgICAgT0VNWzNdOwogICAgY2hhciAgICAgICAgICAgIG5hbWVbN107ICAgICAgICAgICAgLy8gU0Q6IDUgYnl0ZSBzdHJpbmcsIE1NQzogNiBieXRlIHN0cmluZwogICAgdW5zaWduZWQgY2hhciAgIHJldmlzaW9uOwogICAgdW5zaWduZWQgaW50ICAgc2VyaWFsTnVtYmVyOwogICAgdW5zaWduZWQgc2hvcnQgIG1hbnVmYWN0dXJlRGF0ZTsgICAgLy8gU0Q6IDEyIGJpdCBjb2RlLCBNTUM6IDggYml0IGNvZGUuCgp9IFNESU9fQ0lEOwoKLy8gQ1NECnR5cGVkZWYgc3RydWN0CnsKICAgIHVuc2lnbmVkIGNoYXIgICBzdHJ1Y3R1cmU7CQkJCQkvLyBbMTI3OjEyNl0gZm9yIGVNTUMgYW5kIFNECiAgICB1bnNpZ25lZCBjaGFyICAgc3BlY2lmaWNhdGlvblZlcnNpb247CiAgICB1bnNpZ25lZCBjaGFyICAgZGF0YVJlYWRBY2Nlc3NUaW1lMjsKICAgIHVuc2lnbmVkIGNoYXIgICBkYXRhUmVhZEFjY2Vzc1RpbWUxOwogICAgdW5zaWduZWQgY2hhciAgIG1heERhdGFUcmFuc2ZlclJhdGU7CiAgICB1bnNpZ25lZCBzaG9ydCAgY2FyZENvbW1hbmRDbGFzczsKICAgIHVuc2lnbmVkIGNoYXIgICByZWFkQmxvY2tMZW5ndGg7CiAgICB1bnNpZ25lZCBjaGFyICAgcGFydGlhbFJlYWRGbGFnOwogICAgdW5zaWduZWQgY2hhciAgIHdyaXRlQmxvY2tNaXNhbGlnbjsKICAgIHVuc2lnbmVkIGNoYXIgICByZWFkQmxvY2tNaXNhbGlnbjsKICAgIHVuc2lnbmVkIGNoYXIgICBEU1JfaW1wbGVtZW50ZWQ7CiAgICB1bnNpZ25lZCBzaG9ydCAgZGV2aWNlU2l6ZTsKICAgIHVuc2lnbmVkIGNoYXIgICBtYXhyZWFkQ3VycmVudF9WZGRNaW47CiAgICB1bnNpZ25lZCBjaGFyICAgbWF4UmVhZEN1cnJlbnRfVmRkTWF4OwogICAgdW5zaWduZWQgY2hhciAgIG1heFdyaXRlQ3VycmVudF9WZGRNaW47CiAgICB1bnNpZ25lZCBjaGFyICAgbWF4V3JpdGVDdXJyZW50X1ZkZE1heDsKICAgIHVuc2lnbmVkIGNoYXIgICBkZXZpY2VTaXplTXVsdGlwbGllcjsKICAgIHVuc2lnbmVkIGNoYXIgICBlcmFzZUJsb2NrRW5hYmxlOyAgICAgICAgICAgLy9TRCBvbmx5CiAgICB1bnNpZ25lZCBjaGFyICAgZXJhc2VTZWN0b3JTaXplOyAgICAgICAgICAgIC8vU0Q6NyBiaXRzLCBNTUM6IDUgYml0cwogICAgdW5zaWduZWQgY2hhciAgIGVyYXNlR3JvdXBTaXplOyAgICAgICAgICAgICAvL01NQzogb25seQogICAgdW5zaWduZWQgY2hhciAgIFdQX0dyb3VwU2l6ZTsgICAgICAgICAgICAgICAvL1NEOjcgYml0cywgTU1DOiA1IGJpdHMKICAgIHVuc2lnbmVkIGNoYXIgICBXUF9Hcm91cEVuYWJsZTsKICAgIHVuc2lnbmVkIGNoYXIgICB3cml0ZVNwZWVkRmFjdG9yOwogICAgdW5zaWduZWQgY2hhciAgIHdyaXRlQmxvY2tMZW5ndGg7CiAgICB1bnNpZ25lZCBjaGFyICAgcGFydGlhbFdyaXRlRmxhZzsKICAgIHVuc2lnbmVkIGNoYXIgICBmaWxlRm9ybWF0R3JvdXA7CiAgICB1bnNpZ25lZCBjaGFyICAgY29weUZsYWc7CiAgICB1bnNpZ25lZCBjaGFyICAgV1BfcGVybTsKICAgIHVuc2lnbmVkIGNoYXIgICBXUF90ZW1wOwogICAgdW5zaWduZWQgY2hhciAgIGZpbGVGb3JtYXQ7Cgp9IFNESU9fQ1NEOwoKI2RlZmluZSBQQVJUSVRJT05fTUFOQUdFTUVOVF9DTURfU0VUIAkweEZGRkYyRgojZGVmaW5lIERFRkFVTFRfQ01EX1NFVAkJCQkJMHhGRkZGRkYKI2RlZmluZSBDSEVDS19GVU5DVElPTl9NT0RFIAkJCTAKI2RlZmluZSBTV0lUQ0hfRlVOQ1RJT05fTU9ERQkJCTEKI2RlZmluZSBQQVJUSVRJT05fTUFOQUdFTUVOVF9GVU5DVElPTiAJMgojZGVmaW5lIE1NQ19BTFRFUk5BVEVfQk9PVF9BUkdVTUVOVCAJMHhGRkZGRkZGQQojZGVmaW5lIE1NQ19DTUQwX1BSRV9JRExFX0FSR1VNRU5UCQkweEYwRjBGMEYwCgoKdHlwZWRlZiBlbnVtCnsKCVVOSU5JVElBTElaRUQsCQkJLy8gQ29udHJvbGxlciBhbmQgQ2FyZCBhcmUgdW5pbml0aWFsaXplZAoJSU5JVElBTElaRSwJCQkJLy8gQ29udHJvbGxlciBhbmQgQ2FyZCBhcmUgYmVpbmcgbmluaXRpYWxpemVkCglSRUFELAkJCQkJLy8gTXVsdGlwbGUgQmxvY2sgUmVhZCBTdGF0ZQoJRVJBU0UsCQkJCQkvLyBFcmFzZSBTdGF0ZQoJV1JJVEUsCQkJCQkvLyBNdWx0aXBsZSBCbG9jayBXcml0ZSBTdGF0ZQoJUkVBRFksCQkJCQkvLyBUaGUgQ2FyZCBpcyByZWFkeSBmb3IgRGF0YSBUcmFuc2ZlcgoJREFUQVRSQU4sCQkJCS8vIFRoZSBjb250cm9sbGVyIGhhcyBmaW5pc2hlZCBkYXRhIHRyYW5zZmVyIGJ1dCBjYXJkIG1heSBiZSBidXN5CglGQVVMVAkJCQkJLy8gRmF1bHQKfSBTRE1NQ19JT19UUkFOU0ZFUlM7CgovLyBWaXRhbCBpbmZvcm1hdGlvbiB1c2VkIGluIERhdGEgVHJhbnNmZXJzIGJ5IHRoZSBJU1IgYW5kIGRyaXZlciByb3V0aW5lcy4KdHlwZWRlZiBzdHJ1Y3QKewoJbG9uZyBsb25nCQkJCUNhcmRBZGRyZXNzOwkJLy8gU3RhcnRpbmcgQ2FyZCBBZGRyZXNzCglVSU5UX1QJCQkJCVRyYW5zV29yZFNpemU7IAkJLy8gVG90YWwgTnVtYmVyIG9mIEJ5dGVzIGludm9sdmVkIGluIHRoaXMgdHJhbnNhY3Rpb24KCVVJTlRfVAkJCQkJTnVtQmxvY2tzOyAJCQkvLyBUb3RhbCBOdW1iZXIgb2YgQmxvY2tzIGludm9sdmVkIGluIHRoaXMgdHJhbnNhY3Rpb24KCVVJTlRfVAkJCQkJTG9jYWxBZGRyOwkJCS8vIERlc3RpbmF0aW9uIEFkZHJlc3MgUG9pbnRlciBmb3IgcmVhZHMsIGFuZCBzb3VyY2UgYWRkciBmb3Igd3JpdGVzCglVSU5UX1QgCQkJCQlTdGFydERpc2NhcmRXb3JkczsJLy8gV29yZHMgLSBmcm9tIHRoZSBmaXJzdCBibG9jayB0aGF0IGNhbGxlciBkb2Vzbid0IHdhbnQKCVVJTlRfVAkJCQkJRW5kRGlzY2FyZFdvcmRzOwkvLyBXb3JkcyAtIGZyb20gdGhlIGxhc3QgYmxvY2sgdGhhdCBjYWxsZXIgZG9lc24ndCB3YW50CglVSU5UX1QJCQkJCVdvcmRJbmRleDsJCQkvLyBXb3JkcyAtIFdvcmQgaW5kZXggdG8gdGhlIHByb2dyZXNzIGluIHRoaXMgdHJhbnNmZXIgcmVxdWVzdAoJVUlOVDhfVAkJCQkJQ21kOwkJCQkvLyBUaGUgY29tbWFuZCB0aGF0IHN0YXJ0ZWQgdGhlIHRyYW5zYWN0aW9uCglVSU5UOF9UCQkJCQlBQ21kRmxhZzsJCQkvLyBJbmRpY2F0ZXMgaWYgdGhlIGV4ZWN1dGluZyBjb21tYW5kIGlzIHN0YW5kYXJkIHZzLiBhcHBsaWNhdGlvbiBzcGVjaWZpYyAoQUNNRCkKCVVJTlQ4X1QJCQkJCUF1dG9DTUQxMk1vZGU7CQkvLyBXaGVuICJ0cnVlIiwgdGhlIGNvbnRyb2xsZXIgaXMgb3BlcmF0aW5nIGluIGF1dG8gY29tbWFuZCAxMiBtb2RlLgoJVUlOVDhfVAkJCQkJUmVzcFR5cGU7CQkJLy8gSW5mbyBhYm91dCB0aGUgcmVzcG9uc2UgdHlwZSBhbmQgcG90ZW50aWFsIGZvciBidXN5IHN0YXRlLgp9IFNETU1DX1RSQU5TRkVSOwoKdHlwZWRlZiBzdHJ1Y3QKewoJVUlOVF9UCQkJCQlSQ0E7CQkJLy8gUkNBIG9mIHRoZSBjYXJkCiAgCVVJTlRfVAkJCQkJT0NSOwkJCS8vIE9DUiBSZWdpc3RlciBDb250ZW50cwoJQ0lEX0xBWU9VVAkJCQlDSUQ7CQkJLy8gQ0lEIFJlZ2lzdGVyCiAgCUNTRF9MQVlPVVQJCQkgIAlDU0Q7CQkJLy8gQ1NEIFJlZ2lzdGVyIENvbnRlbnRzCiAgCVNDUl9MQVlPVVQJCQkJU0NSOwkJCS8vIFNDUiBSZWdpc3RlciBDb250ZW50cwoJU0RfTEFZT1VUICAgICAgICAgICAgICAgU0Q7ICAgICAgICAgICAgIC8vIFNEIHN0YXR1cwp9CVNETU1DX0NBUkRfUkVHSVNURVJTOwoKI2RlZmluZSBTRF9TUEVDX01BU0sJMHgwRjAwMDAwMAojZGVmaW5lIFNEX1NQRUNfT0ZGU0VUCTI0CgoKdHlwZWRlZiBzdHJ1Y3QKewogIFVJTlRfVCBwQnVmZmVyWzRdOwkJCQkJCQkvLyBCdWZmZXIgdG8gcmVhZCB2YWx1ZXMgaW4gdG8KICB2b2xhdGlsZSBVSU5UX1QgQ29tbWFuZENvbXBsZXRlOwovLyBUQkQgIFVJTlRfVCBDb21tYW5kRXJyb3I7CiAgVUlOVF9UIFNlbmRTdG9wQ29tbWFuZDsJCQkJCS8vIElmIHNvbWUgcmVhZC93cml0ZSB0cmFuc2FjdGlvbnMgcmVxdWlyZSBzdG9wIGNvbW1hbmQKICBVSU5UX1QgUjFfUkVTUDsJCQkJCQkJLy8gQ2FwdHVyZSB0aGUgUjEgUmVzcG9uc2Ugb2YgdGhlIENhcmQgZm9yIG1vc3QgY29tbWFuZHMKfSBTRE1NQ19SRVNQT05TRTsKCnR5cGVkZWYgZW51bQp7CglCWVRFX0FDQ0VTUyA9IDAsCglTRUNUT1JfQUNDRVNTID0gMQp9QUNDRVNTX01PREU7CgovLyBUaGlzIFByb3BlcnRpZXMgc3RydWN0dXJlIGlzIHNoYXJlZCBiZXR3ZWVuIE1NNCBhbmQgbGVnYWN5IHR5cGUgZHJpdmVycy4gVGhlIHBDb250ZXh0IGZpZWxkCi8vIGlzIHNwZWNpZmljIHRvIHRoZSB2YXJpYW50LgoKdHlwZWRlZiBzdHJ1Y3QKewoJQ09OVFJPTExFUl9UWVBFCQkJQ29udHJvbGxlclR5cGU7CQkvLyBTZWUgQ09OVFJPTExFUl9UWVBFIHBsYXRmb3JtY29uZmlnLmgKCXZvaWQJCQkJIAkqcENvbnRleHQ7IAkJCS8vIFBvaW50ZXIgdG8gTU1DIGNvbnRyb2wgcmVnaXN0ZXJzCglVSU5UOF9UCQkJCQlTRDsgCQkJCS8vIEluZGljYXRlcyBpZiB0aGUgY2FyZCBpcyBTRCwgZVNEIG9yIE1NQwogIAlVSU5UOF9UCQkJCQlTbG90OyAJCQkJLy8gSW5kaWNhdGVzIHdoaWNoIHNsb3QgdXNlZAoJU0RNTUNfQ0FSRF9SRUdJU1RFUlMJQ2FyZFJlZzsJCQkvLyBDYXJkIFJlZ2lzdGVycwoJU0RNTUNfUkVTUE9OU0UJCQlDYXJkUmVwb25zZTsJCS8vIENhcmQgUmVzcG9uc2UgUmVsYXRlZAoJVUlOVF9UIAkJCQkJU0RfVkhTOyAJCQkvLyBTRCBWb2x0YWdlIEFjY2VwdGFuY2UgUmV0dXJuIFZhbHVlIChTRCBvbmx5KQoJdm9sYXRpbGUgU0RNTUNfSU9fVFJBTlNGRVJTCVN0YXRlOwkJCS8vIEluZGljYXRlIFN0YXRlIG9mIHRoZSBjYXJkCglBQ0NFU1NfTU9ERQkJCQlBY2Nlc3NNb2RlOwkJCS8vIEhpZ2ggRGVuc2l0eSBDYXJkCglTRE1NQ19UUkFOU0ZFUgkJCVRyYW5zOwkJCQkvLyBUcmFuc2ZlciBTdGF0ZSBvZiB0aGUgQ2FyZAoJVUlOVF9UCQkJCQlSZWFkQmxvY2tTaXplOwkJLy8gQnl0ZXMgLSBCbG9jayBTaXplIFVzZWQgZm9yIFJlYWRzCglVSU5UX1QJCQkJCVdyaXRlQmxvY2tTaXplOwkJLy8gQnl0ZXMgLSBCbG9jayBTaXplIFVzZWQgZm9yIFdyaXRlcwoJVUlOVF9UCQkJCQlFcmFzZVNpemU7CQkJLy8gQnl0ZXMgLSBNaW5pbXVtIFNpemUgb2YgYW4gZXJhc2FibGUgdW5pdAoJVUlOVF9UCQkJCQlDYXJkQ2FwYWNpdHk7IAkJLy8gQnl0ZXMgLSBNYXhpbXVtIENhcGFjaXR5IG9mIHRoZSBjYXJkCglVSU5UX1QJCQkJCVNETUFfTW9kZTsgCQkJLy8gRW5hYmxlIFNETUEgTW9kZSBvciBOb3QuCglVSU5UX1QJCQkJCVN0cmljdEVycm9yQ2hlY2s7CS8vIFJlbGF4IGVycm9yIGNoZWNraW5nIGR1cmluZyBjYXJkIGluaXQuIE5vdCBhbGwgY2FyZHMgYXJlIHN0cmljdGx5IGNvbXBsaWFudC4KfQpTRE1NQ19Qcm9wZXJ0aWVzX1QsICpQX1NETU1DX1Byb3BlcnRpZXNfVDsKCgovLyNpZmRlZiBJT19DQVJEX1NVUFBPUlQKLy9TYXR5YQp0eXBlZGVmIHN0cnVjdCBTRElPX1Byb3BlcnRpZXNfcwp7CglVSU5UOF9UCQl1Y2hDYXJkUmVhZHlBZnRlckluaXQ6MTsKCVVJTlQ4X1QgCXVjaE5vT2ZJb0Z1bmM6MzsKCVVJTlQ4X1QJCXVjaE1lbVByZXNlbnQ6MTsKCVVJTlQ4X1QJCXVjaFN0dWZmQml0czozOwovLwlVSU5UMzJfVAl1Y2hJb09jZXI6MjQ7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgU0RJT19Qcm9wZXJ0aWVzX1Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBTRElPX0NNRDUyX0FyZ19zCnsKCVVJTlRfVAl1Y2hXcml0ZURhdGE6ODsKCVVJTlRfVAl1Y2hTdHVmZkJpdDE6MTsKCVVJTlRfVAl1aVJlZ0FkZHI6MTc7CglVSU5UX1QJdWNoU3R1ZmZCaXQ6MTsKCVVJTlRfVCAJdWNoUmF3RmxhZzoxOwoJVUlOVF9UCXVjaEZ1bmNOdW06MzsKCVVJTlRfVCAJdWNoUndGbGFnOjE7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgU0RJT19DTUQ1Ml9BcmdfVDsKCnR5cGVkZWYgdW5pb24gU0RJT19DTUQ1Ml9BcmdfVW5pb24KewoJU0RJT19DTUQ1Ml9BcmdfVCBzdENtZDUyQXJnOwoJVUlOVDMyX1QgdWlDbWQ1MkFyZzsKfVNESU9fQ01ENTJfQXJnX1VuaW9uX1Q7Cgp0eXBlZGVmIHN0cnVjdCBTRElPX0NNRDUzX0FyZ19zCnsKCVVJTlRfVAl1Y2hCeXRlX0Jsa19jbnQ6OTsKCVVJTlRfVAl1aVJlZ0FkZHI6MTc7CglVSU5UX1QJdWNoT1BDb2RlOjE7CglVSU5UX1QJdWNoQmxrTW9kZToxOwoJVUlOVF9UCXVjaEZ1bmNOdW06MzsKCVVJTlRfVCAJdWNoUndGbGFnOjE7Cn0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgU0RJT19DTUQ1M19BcmdfVDsKCnR5cGVkZWYgdW5pb24gU0RJT19DTUQ1M19BcmdfVW5pb24KewoJU0RJT19DTUQ1M19BcmdfVCBzdENtZDUzQXJnOwoJVUlOVDMyX1QgdWlDbWQ1M0FyZzsKfVNESU9fQ01ENTNfQXJnX1VuaW9uX1Q7CgoKLy8jZW5kaWYKLyogQml0IFBvc2l0aW9uIE1hY3JvcyAqLwojZGVmaW5lIFhMTFBfQklUXzAgICAgKCAxdSA8PCAwICkKI2RlZmluZSBYTExQX0JJVF8xICAgICggMXUgPDwgMSApCiNkZWZpbmUgWExMUF9CSVRfMiAgICAoIDF1IDw8IDIgKQojZGVmaW5lIFhMTFBfQklUXzMgICAgKCAxdSA8PCAzICkKI2RlZmluZSBYTExQX0JJVF80ICAgICggMXUgPDwgNCApCiNkZWZpbmUgWExMUF9CSVRfNSAgICAoIDF1IDw8IDUgKQojZGVmaW5lIFhMTFBfQklUXzYgICAgKCAxdSA8PCA2ICkKI2RlZmluZSBYTExQX0JJVF83ICAgICggMXUgPDwgNyApCiNkZWZpbmUgWExMUF9CSVRfOCAgICAoIDF1IDw8IDggKQojZGVmaW5lIFhMTFBfQklUXzkgICAgKCAxdSA8PCA5ICkKI2RlZmluZSBYTExQX0JJVF8xMCAgICggMXUgPDwgMTAgKQojZGVmaW5lIFhMTFBfQklUXzExICAgKCAxdSA8PCAxMSApCiNkZWZpbmUgWExMUF9CSVRfMTIgICAoIDF1IDw8IDEyICkKI2RlZmluZSBYTExQX0JJVF8xMyAgICggMXUgPDwgMTMgKQojZGVmaW5lIFhMTFBfQklUXzE0ICAgKCAxdSA8PCAxNCApCiNkZWZpbmUgWExMUF9CSVRfMTUgICAoIDF1IDw8IDE1ICkKI2RlZmluZSBYTExQX0JJVF8xNiAgICggMXUgPDwgMTYgKQojZGVmaW5lIFhMTFBfQklUXzE3ICAgKCAxdSA8PCAxNyApCiNkZWZpbmUgWExMUF9CSVRfMTggICAoIDF1IDw8IDE4ICkKI2RlZmluZSBYTExQX0JJVF8xOSAgICggMXUgPDwgMTkgKQojZGVmaW5lIFhMTFBfQklUXzIwICAgKCAxdSA8PCAyMCApCiNkZWZpbmUgWExMUF9CSVRfMjEgICAoIDF1IDw8IDIxICkKI2RlZmluZSBYTExQX0JJVF8yMiAgICggMXUgPDwgMjIgKQojZGVmaW5lIFhMTFBfQklUXzIzICAgKCAxdSA8PCAyMyApCiNkZWZpbmUgWExMUF9CSVRfMjQgICAoIDF1IDw8IDI0ICkKI2RlZmluZSBYTExQX0JJVF8yNSAgICggMXUgPDwgMjUgKQojZGVmaW5lIFhMTFBfQklUXzI2ICAgKCAxdSA8PCAyNiApCiNkZWZpbmUgWExMUF9CSVRfMjcgICAoIDF1IDw8IDI3ICkKI2RlZmluZSBYTExQX0JJVF8yOCAgICggMXUgPDwgMjggKQojZGVmaW5lIFhMTFBfQklUXzI5ICAgKCAxdSA8PCAyOSApCiNkZWZpbmUgWExMUF9CSVRfMzAgICAoIDF1IDw8IDMwICkKI2RlZmluZSBYTExQX0JJVF8zMSAgICggMXUgPDwgMzEgKQoKCi8qCVNEX0VSUk9SX0lOVF9TVEFUVVMJCQkJMHgwMDMyCUVycm9yIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KLyogQ1JDIFN0YXR1cyBFcnJvciAqLwojZGVmaW5lCVNEX0VSUk9SX0lOVF9TVEFUVVNfQ1JDX1NUQVRVU19FUlIJCQlYTExQX0JJVF8xNQovKiBDb21tYW5kIENvbXBsZXRpb24gU2lnbmFsIFRpbWVvdXQgRXJyb3IgKi8KI2RlZmluZQlTRF9FUlJPUl9JTlRfU1RBVFVTX0NQTF9USU1FT1VUX0VSUgkJCVhMTFBfQklUXzE0Ci8qIEFYSSBCdXMgUmVzcG9uc2UgRXJyb3IgKi8KI2RlZmluZQlTRF9FUlJPUl9JTlRfU1RBVFVTX0FYSV9SRVNQX0VSUgkJCVhMTFBfQklUXzEzCi8qIFNQSSBNb2RlIEVycm9yICovCiNkZWZpbmUJU0RfRVJST1JfSU5UX1NUQVRVU19TUElfRVJSCQkJCQlYTExQX0JJVF8xMgovKgkJQml0KHMpIFNEX0VSUk9SX0lOVF9TVEFUVVNfUlNSVl8xMV8xMCByZXNlcnZlZCAqLwojZGVmaW5lCVNEX0VSUk9SX0lOVF9TVEFUVVNfQURNQV9FUlIJCQkJWExMUF9CSVRfOQkJCS8qIEFETUEgRXJyb3IgKi8KLyogQXV0byBDTUQxMiBFcnJvciAqLwojZGVmaW5lCVNEX0VSUk9SX0lOVF9TVEFUVVNfQVVUT19DTUQxMl9FUlIJCQlYTExQX0JJVF84Ci8qIEN1cnJlbnQgTGltaXQgRXJyb3IgKi8KI2RlZmluZQlTRF9FUlJPUl9JTlRfU1RBVFVTX0NVUl9MSU1JVF9FUlIJCQlYTExQX0JJVF83Ci8qIFJlYWREYXRhRW5kIEJpdCBFcnJvciAqLwojZGVmaW5lCVNEX0VSUk9SX0lOVF9TVEFUVVNfUkRfREFUQV9FTkRfQklUX0VSUgkJWExMUF9CSVRfNgovKiBSZWFkIERhdGEgQ1JDIEVycm9yICovCiNkZWZpbmUJU0RfRVJST1JfSU5UX1NUQVRVU19SRF9EQVRBX0NSQ19FUlIJCQlYTExQX0JJVF81Ci8qIERhdGEgVGltZW91dCBFcnJvciAqLwojZGVmaW5lCVNEX0VSUk9SX0lOVF9TVEFUVVNfREFUQV9USU1FT1VUX0VSUgkJWExMUF9CSVRfNAovKiBDb21tYW5kIEluZGV4IEVycm9yICovCiNkZWZpbmUJU0RfRVJST1JfSU5UX1NUQVRVU19DTURfSU5ERVhfRVJSCQkJWExMUF9CSVRfMwovKiBDb21tYW5kIEVuZCBCaXQgRXJyb3IgKi8KI2RlZmluZQlTRF9FUlJPUl9JTlRfU1RBVFVTX0NNRF9FTkRfQklUX0VSUgkJCVhMTFBfQklUXzIKLyogQ29tbWFuZCBDUkMgRXJyb3IgKi8KI2RlZmluZQlTRF9FUlJPUl9JTlRfU1RBVFVTX0NNRF9DUkNfRVJSCQkJCVhMTFBfQklUXzEKLyogQ29tbWFuZCBUaW1lb3V0IEVycm9yICovCiNkZWZpbmUJU0RfRVJST1JfSU5UX1NUQVRVU19DTURfVElNRU9VVF9FUlIJCQlYTExQX0JJVF8wCgoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCVNETU1DIFIxIFJlc3BvbnNlIEJpdHMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdHlwZWRlZiBlbnVtCnsKCVIxX1NXSVRDSF9FUlJPUgkgCQkJPSBYTExQX0JJVF8wLAoJUjFfRVJBU0VfUkVTRVRfRVJST1IJIAk9IFhMTFBfQklUXzEzLAoJUjFfQ0lEQ1NEX09WRVJXUklURV9FUlJPUgk9IFhMTFBfQklUXzE2LAoJUjFfT1ZFUlJVTl9FUlJPUiAJCQk9IFhMTFBfQklUXzE3LAoJUjFfVU5ERVJVTl9FUlJPUiAJCQk9IFhMTFBfQklUXzE4LAoJUjFfR0VORVJBTF9FUlJPUiAJCQk9IFhMTFBfQklUXzE5LAoJUjFfQ0NfRVJST1IgCQkJCT0gWExMUF9CSVRfMjAsCglSMV9FQ0NfRVJST1IgCQkJCT0gWExMUF9CSVRfMjEsCglSMV9JTExfQ01EX0VSUk9SIAkJCT0gWExMUF9CSVRfMjIsCglSMV9DT01fQ1JDX0VSUk9SCQkJPSBYTExQX0JJVF8yMywKCVIxX0xPQ0tfVUxPQ0tfRVJSUk9SCQk9IFhMTFBfQklUXzI0LAoJUjFfTE9DS19FUlJPUiAJCQkJPSBYTExQX0JJVF8yNSwKCVIxX1dQX0VSUk9SIAkJCQk9IFhMTFBfQklUXzI2LAoJUjFfRVJBU0VfUEFSQU1fRVJST1IJCT0gWExMUF9CSVRfMjcsCglSMV9FUkFTRV9TRVFfRVJST1IJCQk9IFhMTFBfQklUXzI4LAoJUjFfQkxLX0xFTl9FUlJPUiAJCQk9IFhMTFBfQklUXzI5LAoJUjFfQUREUl9NSVNBTElHTl9FUlJPUiAJCT0gWExMUF9CSVRfMzAsCglSMV9BRERSX1JBTkdFX0VSUk9SIAkJPSBYTExQX0JJVF8zMQp9IFIxX1NETU1DX1JFU1BPTlNFX0NPREVTOwoKCi8vIFNESEMgMy4xIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGRlZmluaXRpb24KdHlwZWRlZiBzdHJ1Y3QKewogIFZVSU5UMzJfVCBtbTRfc3lzYWRkcjsgICAgICAgICAgICAgICAgICAJCS8vIERNQSBzeXN0ZW0gYWRkcmVzcwkJCQkgCTB4MAogIFZVSU5UMzJfVCBtbTRfYmxrX2NudGw7ICAgICAgICAgICAgICAgICAgICAgICAvLyBCbG9jayBzaXplIGNvbnRyb2wgcmVnaXN0ZXIJCSAJCTB4NAogIFZVSU5UMzJfVCBtbTRfYXJnOyAgICAgICAgICAgICAgICAgICAgICAJCS8vIENvbW1hbmQgYXJndW1lbnQJCQkJCTB4OAogIFZVSU5UMzJfVCBtbTRfY21kX3hmcm1kOyAgICAgICAgICAgICAgICAgICAgICAvLyBDb21tYW5kIGFuZCB0cmFuc2ZlciBtb2RlCQkgCTB4QwogIFZVSU5UMzJfVCBtbTRfcmVzcDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbWQgcmVzcG9uc2UgMAkJCQkJIAkJMHgxMAogIFZVSU5UMzJfVCBtbTRfcmVzcDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbWQgcmVzcG9uc2UgMQkJCQkJIAkJMHgxNAogIFZVSU5UMzJfVCBtbTRfcmVzcDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbWQgcmVzcG9uc2UgMgkJCQkJIAkJMHgxOAogIFZVSU5UMzJfVCBtbTRfcmVzcDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbWQgcmVzcG9uc2UgMwkJCQkJIAkJMHgxQwogIFZVSU5UMzJfVCBtbTRfZHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidWZmZXIgZGF0YSBwb3J0CQkJCQkgCQkweDIwCiAgVlVJTlQzMl9UIG1tNF9zdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1tNCBzdGF0ZQkJCQkJCSAJCTB4MjQKICBWVUlOVDMyX1QgbW00X2NudGwxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaG9zdCBjb250cm9sIDEJCQkJCSAJCTB4MjgKICBWVUlOVDMyX1QgbW00X2NudGwyOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaG9zdCBjb250cm9sIDIJCQkJCSAJCTB4MkMKICBWVUlOVDMyX1QgbW00X2lfc3RhdDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdHVzIG9mIGN1cnJlbnQgY29tbWFuZCAJCSAJCTB4MzAKICBWVUlOVDMyX1QgbW00X2lfc3RhdF9lbjsgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJydXB0IHN0YXR1cyBlbmFibGUJCQkgCQkweDM0CiAgVlVJTlQzMl9UIG1tNF9pX3NpZ19lbjsgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVycnVwdCBzaWduYWwgZW5hYmxlCQkJIAkJMHgzOAogIFZVSU5UMzJfVCBtbTRfYWNtZDEyX2VyOyAgICAgICAgICAgICAgICAgICAgICAvLyBhdXRvIGNtZDEyIGVycm9yIHN0YXR1cwkJCSAJCTB4M0MKICBWVUlOVDMyX1QgbW00X2NhcDFfMjsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FwYWJpbGl0aWVzIDEsMgkJCQkJIAkJMHg0MAogIFZVSU5UMzJfVCBtbTRfY2FwM180OyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXBhYmlsaXRpZXMgMyw0CQkJCQkJCTB4NDQKICBWVUlOVDMyX1QgbW00X3NkX21heF9jdXJyZW50MV8yOyAgICAgICAgICAgICAgLy8gbWF4IGN1cnJlbnQgY2FwYWJpbGl0aWVzCQkJCQkweDQ4CiAgVlVJTlQzMl9UIG1tNF9zZF9tYXhfY3VycmVudDNfNDsgICAgICAgICAgICAgIC8vIG1heCBjdXJyZW50IGNhcGFiaWxpdGllcwkJCQkJMHg0QwogIFZVSU5UMzJfVCBtbTRfZm9yY2VfZXZlbnQ7ICAgICAgICAgICAgICAJCS8vIGZvcmNlIGV2ZW50IGZvciBBdXRvQ01EMTIgRXJyb3IgU3RhdHVzCTB4NTAKICBWVUlOVDMyX1QgbW00X2FkbWFfZXJyX3N0YXQ7ICAgICAgICAgICAgICAgICAgLy8gQURNQSBFcnJvciBTdGF0dXMJCQkJCQkweDU0CiAgVlVJTlQzMl9UIG1tNF9hZG1hX3N5c3RlbV9hZGRyZXNzWzJdOyAgICAgIAkvLyBBRE1BIEFkZHJlc3MgNjM6MAkJCQkJCTB4NTgKICBWVUlOVDMyX1QgbW00X3ByZXNldF92YWx1ZV9mb3JfaW5pdF9kczsgCQkvLwkJCQkJCQkJCQkJMHg2MAogIFZVSU5UMzJfVCBtbTRfcHJlc2V0X3ZhbHVlX2Zvcl9oc19zZHIxMjsJCS8vCQkJCQkJCQkJCQkweDY0CiAgVlVJTlQzMl9UIG1tNF9wcmVzZXRfdmFsdWVfZm9yX2hzX3NkcjI1XzUwOwkvLwkJCQkJCQkJCQkJMHg2OAogIFZVSU5UMzJfVCBtbTRfcHJlc2V0X3ZhbHVlX2Zvcl9oc19zZHIxMDRfNTA7CS8vCQkJCQkJCQkJCQkweDZDCiAgVlVJTlQzMl9UIHJlc2VydmVkX1gxWzI4XTsgICAgICAgICAgICAgICAgICAgIC8vIHJlc2VydmVkIGZpZWxkcwkJCQkJCQkweDcwCiAgVlVJTlQzMl9UIG1tNF9zaGFyZWRfYnVzX2NvbnRyb2w7ICAgICAgICAJCS8vIFNoYXJlZCBCdXMgQ29udHJvbCBSZWdpc3RlcgkJCQkweEUwCiAgVlVJTlQzMl9UIHJlc2VydmVkX1gyWzZdOyAgICAgICAgICAgICAgICAgICAJLy8gcmVzZXJ2ZWQJCQkJCQkJCQkweEU0CiAgVlVJTlQzMl9UIG1tNF9zZF9zbG90X2ludF9zdGF0X2N0cmxfdmVyOyAgICAgIC8vIFNEIEludGVycnVwdCBMaW5lIGFuZCBWZXJzaW9uIFN1cHBvcnQJMHhGQwogIFZVSU5UMzJfVCBtbTRfc2RoY19pcGlkOwkJCQkvLyBTREhDIElQIENvcmUgSUQgUmVnaXN0ZXIJCQkJMHgxMDAKICBWVUlOVDMyX1QgbW00X3NkaGNfY2ZnX2luZm87CQkJCQkvLyBTREhDIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gcmVnaXN0ZXIJCQkJMHgxMDQKICBWVUlOVDMyX1QgbW00X3NkaGNfb3BfY3RybDsJCS8vIFNESEMgb3BlcmF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIJCQkJCQkweDEwOAogIFZVSU5UMzJfVCBtbTRfc2RoY19leHRfb3BfY3RybDsJCQkJCS8vIFNESEMgZXh0ZW5kIG9wZXJhdGlvbiBjb250cm9sIHJlZ2lzdGVyCQkJCTB4MTBDCiAgVlVJTlQzMl9UIG1tNF9zZGhjX3Rlc3Rfb3V0OwkJCQkvLyBTREhDIHRlc3Qgb3V0cHV0IHJlZ2lzdGVyCQkJCQkJMHgxMTAKICBWVUlOVDMyX1QgbW00X3NkaGNfdGVzdG91dF9tdXg7CQkJCS8vIFNESEMgdGVzdCBvdXRwdXQgbXV4IHNlbGVjdCByZWdpc3RlcgkJCTB4MTE0CiAgVlVJTlQzMl9UIHJlc2VydmVkX1gzWzJdOyAgICAgICAgICAgICAgICAgICAJLy8gcgkJCQkJCQkJCTB4MTE4CiAgVlVJTlQzMl9UIG1tNF9zZGhjX3Nsb3RfZXh0X2ludDsJCQkJLy8gU0RIQyBzbG90IGV4dGVuZCBpbnRlcnJ1cHQvZXJyb3Igc3RhdHVzIHJlZ2lzdGVyCQkJMHgxMjAKICBWVUlOVDMyX1QgbW00X3NkaGNfc2xvdF9leHRfaW50X2VuOwkJCQkvLyBTREhDIHNsb3QgZXh0ZW5kIGludGVycnVwdC9lcnJvciBzdGF0dXMgZW5hYmxlIHJlZ2lzdGVyCQkJMHgxMjQKICBWVUlOVDMyX1QgbW00X3NkaGNfc2xvdF9vcF9jdHJsOwkJCQkvLyBTREhDIHNsb3Qgb3BlcmF0aW9uIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcgkJCTB4MTI4CiAgVlVJTlQzMl9UIG1tNF9zZGhjX3Nsb3RfZmlmbzsJCQkJLy8gU0RIQyBzbG90IEZJRk8gcmVnaXN0ZXIJCQkweDEyYwogIFZVSU5UMzJfVCBtbTRfc2RoY19zbG90X2VtbWNfY3RybDsJCQkJLy8gU0RIQyBzbG90IGVtbWMgY29udHJvbCByZWdpc3RlcgkJCTB4MTMwCiAgVlVJTlQzMl9UIG1tNF9zZGhjX3Nsb3Rfb3V0cHV0X2RseV9jdHJsOwkJCQkvLyBTREhDIHNsb3Qgb3V0cHV0IGRlbGF5ICBjb250cm9sIHJlZ2lzdGVyCQkJMHgxMzQKICBWVUlOVDMyX1QgbW00X3NkaGNfc2xvdF9kbGxfY3RybDsJCQkJLy8gU0RIQyBzbG90IGRsbCAgY29udHJvbCByZWdpc3RlcgkJCTB4MTM4CiAgVlVJTlQzMl9UIG1tNF9zZGhjX3Nsb3RfZGxsX3BoYXNlX3NlbDsJCQkJLy8gU0RIQyBzbG90IGRsbCBwaGFzZSBzZWwgcmVnaXN0ZXIJCQkweDEzYwogIFZVSU5UMzJfVCBtbTRfc2RoY19zbG90X3N0cm9iZV9kbHlfY3RybDsJCQkJLy8gU0RIQyBzbG90IHN0cm9iZSBkZWxheSBjb250cm9sIHJlZ2lzdGVyCQkJMHgxNDAKICBWVUlOVDMyX1QgbW00X3NkaGNfc2xvdF9yZXR1bmluZ19yZXFfY3RybDsJCQkJLy8gU0RIQyBzbG90IHJldHVuaW5nIHJlcXVlc3QgIGNvbnRyb2wgcmVnaXN0ZXIJCQkweDE0NAogIFZVSU5UMzJfVCBtbTRfc2RoY19zbG90X2F1dG9fcmV0dW5pbmdfY3RybDsJCQkJLy8gU0RIQyBzbG90IGF1dG8gcmV0dW5pbmcgIGNvbnRyb2wgcmVnaXN0ZXIJCQkweDE0OAogIFZVSU5UMzJfVCBtbTRfc2RoY19zbG90X2V4dF9wcmVzX3N0YXRlOwkJCQkvLyBTREhDIHNsb3QgZXh0ZW5kIHByZXNlbnQgc3RhdGUgcmVnaXN0ZXIJCQkweDE0YwogIFZVSU5UMzJfVCBtbTRfc2RoY19zbG90X2RsbF9jdXJfZGx5OwkJCQkvLyBTREhDIHNsb3QgZGxsIGN1cnJlbnQgZGVsYXkgcmVnaXN0ZXIJCQkweDE1MAogIFZVSU5UMzJfVCBtbTRfc2RoY19zbG90X3R1bmluZ19jdXJfZGx5OwkJCQkvLyBTREhDIHNsb3QgdHVuaW5nIGN1cnJlbnQgZGVsYXkgcmVnaXN0ZXIJCQkweDE1NAogIFZVSU5UMzJfVCBtbTRfc2RoY19zbG90X3N0cm9iZV9jdXJfZGx5OwkJCQkvLyBTREhDIHNsb3Qgc3Ryb2JlIGN1cnJlbnQgZGVsYXkgcmVnaXN0ZXIJCQkweDE1OAogIFZVSU5UMzJfVCBtbTRfc2RoY19zbG90X3N1Yl9jbWRfY3RybDsJCQkJLy8gU0RIQyBzbG90IHN1YiBjb21tYW5kIGNvbnRyb2wgcmVnaXN0ZXIJCQkweDE1Ywp9IE1NNF9TRE1NQ19ULCAqUF9NTTRfU0RNTUNfVDsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKiogUmVnaXN0ZXIgTWFza3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLy8gKioqKioqKioqKioqKioqKioqKiogTU00X0JMS19DTlRMIDB4NCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKdHlwZWRlZiBzdHJ1Y3QKewogdW5zaWduZWQgaW50IHhmcl9ibGtzeiAgICAgICA6IDEyOyAgICAgICAvLyBUcmFuc2ZlciBCbG9jayBTaXplCiB1bnNpZ25lZCBpbnQgZG1hX2J1ZnN6ICAgICAgIDogMzsgICAgICAgIC8vIEhvc3QgRE1BIGJ1ZmZlciBzaXplCiB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQJCSAgOiAxOwkJICAvLyBaTC0tIGhlcmUgc2hvdWxkIGJlIG9uZSByZXNlcnZyZWQgYml0CiB1bnNpZ25lZCBpbnQgYmxrX2NudCAgICAgICAgIDogMTY7ICAgICAgIC8vIEJsb2NrIENvdW50IGZvciBDdXJyZW50IFRyYW5zZmVyCn0gTU00X0JMS19DTlRMLCAqUF9NTTRfQkxLX0NOVEw7CgojZGVmaW5lIE1NNF81MTJfSE9TVF9ETUFfQkRSWSAgMHg3CgoKLy8gKioqKioqKioqKioqKioqKioqKioqIE1NNF9DTURfWEZSTUQgMHhjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLy8KdHlwZWRlZiBzdHJ1Y3QKewoKdW5zaWduZWQgaW50IGRtYV9lbiAJCSA6IDE7CQkgLy8gRE1BIGVuYWJsZQkJCQkJCSAgIDAKdW5zaWduZWQgaW50IGJsa2NidGVuCQkgOiAxOwkJIC8vIEJsb2NrIENvdW50IEVuYWJsZQkJCQkgICAxCnVuc2lnbmVkIGludCBhdXRvY21kMTIJCSA6IDI7CQkgLy8gQXV0b0NNRDEyCQkJCQkJICAgMgovLwl4aXVmZW5nCUZyb20gQVBTRSdzIGNvZGUgdGhlcmUgaXMgb25lIHJlc2VydmVkMSBiaXQgaGVyZSBiZWNhdXNlCi8vCWF1dG9jbWQxMiBpcyAxIGJpdAovLwl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQxCQkgOiAxOwkJIC8vIAkJCQkJCQkJICAgMwp1bnNpZ25lZCBpbnQgZHhmcmRpcgkJIDogMTsJCSAvLyBEYXRhIFRyYW5zZmVyIERpcmVjdGlvbiBTZWxlY3QJICAgNAp1bnNpZ25lZCBpbnQgbXNfYmxrc2VsCQkgOiAxOwkJIC8vIE11bHRpIEJsb2NrIFNlbGVjdAkJCQkgICA1CnVuc2lnbmVkIGludCByZXNlcnZlZDIJCSA6IDEwOwkJICAvLwkJCQkJCQkJICAgNgp1bnNpZ25lZCBpbnQgcmVzX3R5cGUJCSA6IDI7CQkgLy8gUmVzcG9uc2UgVHlwZQkJCQkJICAgMTYKdW5zaWduZWQgaW50IHJlc2VydmVkMwkJIDogMTsJCSAvLyAJCQkJCQkJCSAgIDE4CnVuc2lnbmVkIGludCBjcmNjaGtlbgkJIDogMTsJCSAvLyBDUkMgY2hlY2sgZW5hYmxlCQkJCSAgIDE5CnVuc2lnbmVkIGludCBpZHhjaGtlbgkJIDogMTsJCSAvLyBDb21tYW5kIEluZGV4IENoZWNrIEVuYWJsZQkJICAgMjAKdW5zaWduZWQgaW50IGRwc2VsCQkJIDogMTsJCSAvLyBEYXRhIHByZXNlbnQgICBzZWxlY3QJCQkgICAJICAgMjEKdW5zaWduZWQgaW50IGNtZF90eXBlCQkgOiAyOwkJIC8vIENtZCBUeXBlCQkJCQkJICAgMjIKdW5zaWduZWQgaW50IGNtZF9pZHgJCSA6IDY7CQkgLy8gQ21kIEluZGV4CQkJCQkJICAgMjQKdW5zaWduZWQgaW50IHJlc2VydmVkNAkJIDogMjsJCSAvLyAJCQkJCQkJCSAgIDMwCgp9IE1NNF9DTURfWEZSTUQsICpQX01NNF9DTURfWEZSTUQ7Cgp0eXBlZGVmIHVuaW9uCnsKCU1NNF9DTURfWEZSTUQgbW00X2NtZF94ZnJtZF9iaXRzOwoJdW5zaWduZWQgaW50CQkgIG1tNF9jbWRfeGZybWRfdmFsdWU7Cn0gTU00X0NNRF9YRlJNRF9VTklPTiwgKlBfTU00X0NNRF9YRlJNRF9VTklPTjsKCiNkZWZpbmUgTk9fQVJHVU1FTlQJCQkJCTB4ZmZmZmZmZmYKI2RlZmluZSBNTTRfQ01EX1RZUEVfTk9STUFMIAkJMAojZGVmaW5lIE1NNF9DTURfVFlQRV9TVVNQRU5EICAJCTEKI2RlZmluZSBNTTRfQ01EX1RZUEVfUkVTVU1FIAkJMgojZGVmaW5lIE1NNF9DTURfVFlQRV9BQk9SVCAJCQkzCiNkZWZpbmUgTU00X0NNRF9EQVRBIAkJCQkxCiNkZWZpbmUgTU00X0NNRF9OT0RBVEEJCQkJMAojZGVmaW5lIE1NNF9OT19SRVMJCQkJCTAKI2RlZmluZSBNTTRfMTM2X1JFUwkJCQkJMQojZGVmaW5lIE1NNF80OF9SRVMJCQkJCTIKI2RlZmluZSBNTTRfNDhfUkVTX1dJVEhfQlVTWQkJMwojZGVmaW5lIE1NNF9NVUxUSV9CTE9DS19UUkFOCQkxCiNkZWZpbmUgTU00X1NJTkdMRV9CTE9DS19UUkFOCQkwCiNkZWZpbmUgTU00X0hPU1RfVE9fQ0FSRF9EQVRBCQkwCiNkZWZpbmUgTU00X0NBUkRfVE9fSE9TVF9EQVRBCQkxCgoKCi8vIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzcG9uc2UgdHlwZSBhcmd1bWVudCBvZiByZWxldmFudCBhcGlzLgovLyBpdCB3aWxsIG9jY3VweSBiaXRzIDE1Ojggb2YgdGhlIFJlc3BUeXBlIHBhcmFtZXRlci4KI2RlZmluZSBNTTRfUlRfTUFTSwkJCQkJMHg3ZjAwCiNkZWZpbmUgTU00X1JUX05PTkUJCQkJCTB4MDAwMAojZGVmaW5lCU1NNF9SVF9SMQkJCQkJMHgwMTAwCiNkZWZpbmUJTU00X1JUX1IyCQkJCQkweDAyMDAKI2RlZmluZQlNTTRfUlRfUjMJCQkJCTB4MDMwMAojZGVmaW5lCU1NNF9SVF9SNAkJCQkJMHgwNDAwCiNkZWZpbmUJTU00X1JUX1I1CQkJCQkweDA1MDAKI2RlZmluZQlNTTRfUlRfUjYJCQkJCTB4MDYwMAojZGVmaW5lCU1NNF9SVF9SNwkJCQkJMHgwNzAwCQkvLyBzZCBjYXJkIGludGVyZmFjZSBjb25kaXRpb24KCiNkZWZpbmUgTU00X1JUX0JVU1lNQVNLCQkJCTB4ODAwMAojZGVmaW5lIE1NNF9SVF9CVVNZCQkJCQkweDgwMDAKCgovLyAqKioqKioqKioqKioqKioqKioqKiogTU00X1NUQVRFIDB4MjQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgp0eXBlZGVmIHN0cnVjdAp7CgoJdW5zaWduZWQgaW50IGNjbWRpbmhidAkgICA6IDE7Cgl1bnNpZ25lZCBpbnQgZGNtZGluaGJ0CSAgIDogMTsKCXVuc2lnbmVkIGludCBkYXRhY3R2CSAgIDogMTsKCXVuc2lnbmVkIGludCByZXR1bmluZ19yZXEgIDogMTsKCXVuc2lnbmVkIGludCByZXNlcnZlZDAJICAgOiA0OwoJdW5zaWduZWQgaW50IHdyYWN0diAJICAgOiAxOwoJdW5zaWduZWQgaW50IHJkYWN0diAJICAgOiAxOwoJdW5zaWduZWQgaW50IGJ1ZndyZW4JICAgOiAxOwoJdW5zaWduZWQgaW50IGJ1ZnJkZW4JICAgOiAxOwoJdW5zaWduZWQgaW50IHJlc2VydmVkMQkgICA6IDQ7Cgl1bnNpZ25lZCBpbnQgY2RpbnN0ZAkgICA6IDE7Cgl1bnNpZ25lZCBpbnQgY2RzdGJsIAkgICA6IDE7Cgl1bnNpZ25lZCBpbnQgY2RkZXRsdmwJICAgOiAxOwoJdW5zaWduZWQgaW50IHdwc3dsdmwJICAgOiAxOwoJdW5zaWduZWQgaW50IGx3cmRhdGx2bAkgICA6IDQ7Cgl1bnNpZ25lZCBpbnQgY21kbHZsIAkgICA6IDE7CgkvLwkzLzEyOiBYaXVmZW5nCgkvLwlGcm9tIEFQU0UncyBjb2RlLCB0aGVyZSBpcyBvbmUgcGFyYW0gdXByZGF0bHZsIHdoaWNoIGlzIDQgYml0cy4gb3VyIGNvbnRyb2xsZXIKCS8vIAlkb2VzIG5vdCBoYXZlIHRoaXMgcGFyYW1ldGVyIGFuZCByZXNlcnZlcnMgdGhlIGZvbGxvd2luZyA3IGJpdHMKLy8JdW5zaWduZWQgaW50IHVwcmRhdGx2bAkgICA6IDQ7Cgl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQyCSAgIDogNzsKCn0gTU00X1NUQVRFLCAqUF9NTTRfU1RBVEU7Cgp0eXBlZGVmIHVuaW9uCnsKCU1NNF9TVEFURSAgICAgbW00X3N0YXRlX2JpdHM7Cgl1bnNpZ25lZCBpbnQgIG1tNF9zdGF0ZV92YWx1ZTsKfSBNTTRfU1RBVEVfVU5JT04sICpQX01NNF9TVEFURV9VTklPTjsKCi8vICoqKioqKioqKioqKioqKioqKioqKiBNTTRfQ05UTDEgMHgyOCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCnR5cGVkZWYgc3RydWN0CnsKCXVuc2lnbmVkIGludCBsZWRjbnRsCSAgIDogMTsgCSAgIC8vIDAKCXVuc2lnbmVkIGludCBkYXRhd2lkdGgJICAgOiAxOyAJICAgLy8gMQoJdW5zaWduZWQgaW50IGhpc3BlZWQJICAgOiAxOyAJICAgLy8gMgoJdW5zaWduZWQgaW50IGRtYV9zZWwJICAgOiAyOyAJICAgLy8gMwoJdW5zaWduZWQgaW50IGV4X2RhdGFfd2lkdGggOiAxOyAJICAgLy8gNQoJdW5zaWduZWQgaW50IGNhcmRfZGV0X2wgICAgOiAxOyAJICAgLy8gNgoJdW5zaWduZWQgaW50IGNhcmRfZGV0X3MgICAgOiAxOyAJICAgLy8gNwoJdW5zaWduZWQgaW50IGJ1c3B3ciAJICAgOiAxOyAJICAgLy8gOAoJdW5zaWduZWQgaW50IHZsdGdzZWwJICAgOiAzOyAJICAgLy8gOQoJdW5zaWduZWQgaW50IHJlc2VydmVkMgkgICA6IDQ7IAkgICAvLyAxMgoJdW5zaWduZWQgaW50IGJncmVxc3RwCSAgIDogMTsgCSAgIC8vIDE2Cgl1bnNpZ25lZCBpbnQgY29udHJlcQkgICA6IDE7CQkgICAvLyAxNwoJdW5zaWduZWQgaW50IHJkd2NudGwJICAgOiAxOwkJICAgLy8gMTgKCXVuc2lnbmVkIGludCBiZ2lycWVuCSAgIDogMTsgICAgICAgIC8vIDE5Cgl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQzCSAgIDogNDsKCXVuc2lnbmVkIGludCBjYXJkX2ludF93YWtlIDogMTsgICAgICAgIC8vIDI0Cgl1bnNpZ25lZCBpbnQgY2FyZF9pbnNfd2FrZSA6IDE7CQkgICAvLyAyNQoJdW5zaWduZWQgaW50IGNhcmRfcmVtX3dha2UgOiAxOwkJICAgLy8gMjYKCXVuc2lnbmVkIGludCByZXNlcnZlZDQJICAgOiA1OwoKfSBNTTRfQ05UTDEsICpQX01NNF9DTlRMMTsKCnR5cGVkZWYgdW5pb24KewoJTU00X0NOVEwxICAgICBtbTRfY250bDFfYml0czsKCXVuc2lnbmVkIGludAkJICBtbTRfY250bDFfdmFsdWU7Cn0gTU00X0NOVEwxX1VOSU9OLCAqUF9NTTRfQ05UTDFfVU5JT047CgojZGVmaW5lIE1NNF9WTFRHU0VMXzFfOAkJMHg1CiNkZWZpbmUgTU00X1ZMVEdTRUxfM18wCQkweDYKI2RlZmluZSBNTTRfVkxUR1NFTF8zXzMJCTB4NwoKLy8gKioqKioqKioqKioqKioqKioqKioqIE1NNF9DTlRMMiAweDJjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKdHlwZWRlZiBzdHJ1Y3QKewoJdW5zaWduZWQgaW50IGludGVyX2Nsa19lbgkgICA6IDE7ICAgIC8vIEludGVybmFsIENsb2NrIEVuYWJsZQoJdW5zaWduZWQgaW50IGludGVyX2Nsa19zdGFibGUgIDogMTsgICAgLy8gSW50ZXJuYWwgQ2xvY2sgU3RhYmxlCgl1bnNpZ25lZCBpbnQgbW00Y2xrZW4JCSAgIDogMTsgICAgLy8gQ2xvY2sgRW5hYmxlCgl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQxCQkgICA6IDI7ICAgIC8vIGJpdHMgMyw0Cgl1bnNpZ25lZCBpbnQgY2xrX2dlbl9zZWwJICAgOiAxOyAgICAvLyBiaXQgNQoJdW5zaWduZWQgaW50IHNkX2ZyZXFfc2VsX2hpICAgIDogMjsgICAgLy8gNgoJdW5zaWduZWQgaW50IHNkX2ZyZXFfc2VsX2xvICAgIDogODsgICAgLy8gOAoJdW5zaWduZWQgaW50IGR0b2NudHIJCSAgIDogNDsgICAgLy8gYml0IDAgRGF0YSBUaW1lb3V0IENvdW50ZXIgVmFsdWUKCXVuc2lnbmVkIGludCByZXNlcnZlZDIJCSAgIDogNDsgICAgLy8KCXVuc2lnbmVkIGludCBtc3dyc3QgCQkgICA6IDE7ICAgIC8vIGJpdCA4IFNvZnR3YXJlIFJlc2V0IGZvciBBbGwKCXVuc2lnbmVkIGludCBjbWRzd3JzdAkJICAgOiAxOyAgICAvLyBiaXQgOSBTb2Z0d2FyZSBSZXNldCBmb3IgTU00Q01EIExpbmUKCXVuc2lnbmVkIGludCBkYXRzd3JzdAkJICAgOiAxOyAgICAvLyBiaXQgMTAgU29mdHdhcmUgUmVzZXQgZm9yIE1NNERBVHggTGluZXMKCXVuc2lnbmVkIGludCByZXNlcnZlZDMJCSAgIDogNTsgICAgLy8gYml0cyAxMS0xNQoKfSBNTTRfQ05UTDIsICpQX01NNF9DTlRMMjsKCiNkZWZpbmUgTU00Q0xLRU5fRU5fQ0xPQ0sgICAgMQoKI2RlZmluZSBNTTRDTE9DSzIwMEtIWlJBVEUJMHgxRkYJLy8gU2V0IGFsc28gYWRkaXRpb25hbCBTRF9GUkVRX0hJIGJpdC4JU28gU0RfRlJFUV9TRUwgPSAweDFGRiA9IDUxMSAqIDIgPSAxMDIyIChjbG9jayBkaXZpZGVyKQojZGVmaW5lIE1NNENMT0NLNTBNSFpSQVRFCTIKI2RlZmluZSBNTTRDTE9DSzI1TUhaUkFURQk0CiNkZWZpbmUgTU00Q0xPQ0sxM01IWlJBVEUJOAojZGVmaW5lIE1NNENMT0NLNk1IWlJBVEUJMTYKCiNkZWZpbmUgTU00Q0xPQ0sxODdLSFpSQVRFCTB4ODAKI2RlZmluZSBNTTRDTE9DSzQ4TUhaUkFURQkweDAKI2RlZmluZSBDTE9DS18yN19NVUxUCQkweEUKCiNkZWZpbmUgU0RDTEtfU0VMX0RJVl8xMDI0CTB4MjAwCiNkZWZpbmUgU0RDTEtfU0VMX0RJVl81MTIJMHgxMDAKI2RlZmluZSBTRENMS19TRUxfRElWXzI1NgkweDgwCiNkZWZpbmUgU0RDTEtfU0VMX0RJVl8xMjgJMHg0MAojZGVmaW5lIFNEQ0xLX1NFTF9ESVZfNjQJMHgyMAojZGVmaW5lIFNEQ0xLX1NFTF9ESVZfMzIJMHgxMAojZGVmaW5lIFNEQ0xLX1NFTF9ESVZfMTYJMHgwOAojZGVmaW5lIFNEQ0xLX1NFTF9ESVZfOAkJMHgwNAojZGVmaW5lIFNEQ0xLX1NFTF9ESVZfMgkJMHgwMQojZGVmaW5lIFNEQ0xLX1NFTF9ESVZfMQkJMHgwMAoKI2RlZmluZSBTREJVU180QklUCQkJMHgwMQp0eXBlZGVmIHVuaW9uCnsKCU1NNF9DTlRMMiAgICAgbW00X2NudGwyX2JpdHM7Cgl1bnNpZ25lZCBpbnQJCSAgbW00X2NudGwyX3ZhbHVlOwp9IE1NNF9DTlRMMl9VTklPTiwgKlBfTU00X0NOVEwyX1VOSU9OOwoKLy8gKioqKioqKioqKioqKioqKioqKioqIE1NNF9JX1NUQVQsIE1NNF9JX1NUQVRfRU4sIE1NNF9JX1NJR05fRU4gLTB4MzQqKioqKioqKioqKioKdHlwZWRlZiBzdHJ1Y3QKewoJdW5zaWduZWQgaW50IGNtZGNvbXAJICAgOiAxOyAgIC8vMAoJdW5zaWduZWQgaW50IHhmcmNvbXAJICAgOiAxOyAgIC8vMQoJdW5zaWduZWQgaW50IGJnZXZudCAJICAgOiAxOyAgIC8vMgoJdW5zaWduZWQgaW50IGRtYWludCAJICAgOiAxOyAgIC8vMwoJdW5zaWduZWQgaW50IGJ1ZndycmR5CSAgIDogMTsgICAvLzQKCXVuc2lnbmVkIGludCBidWZyZHJkeQkgICA6IDE7ICAgLy81Cgl1bnNpZ25lZCBpbnQgY2RpbnMJCSAgIDogMTsgICAvLzYKCXVuc2lnbmVkIGludCBjZHJlbQkJICAgOiAxOyAgIC8vNwoJdW5zaWduZWQgaW50IGNkaW50CQkgICA6IDE7ICAgLy84Cgl1bnNpZ25lZCBpbnQgaW50X2EJCSAgIDogMTsgICAvLzkKCXVuc2lnbmVkIGludCBpbnRfYgkJICAgOiAxOyAgIC8vMTAKCXVuc2lnbmVkIGludCBpbnRfYwkJICAgOiAxOyAgIC8vMTEKCXVuc2lnbmVkIGludCByZXR1bmluaWdfaW50IDogMTsgICAvLzEyCgl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQwCSAgIDogMjsgICAvLzEzCgl1bnNpZ25lZCBpbnQgZXJyaW50IAkgICA6IDE7ICAgLy8xNQoJdW5zaWduZWQgaW50IGN0b2VyciAJICAgOiAxOyAgIC8vMTYKCXVuc2lnbmVkIGludCBjY3JjZXJyCSAgIDogMTsgICAvLzE3Cgl1bnNpZ25lZCBpbnQgY2VuZGVycgkgICA6IDE7ICAgLy8xOAoJdW5zaWduZWQgaW50IGNpZHhlcnIJICAgOiAxOyAgIC8vMTkKCXVuc2lnbmVkIGludCBkdG9lcnIgCSAgIDogMTsgICAvLzIwCgl1bnNpZ25lZCBpbnQgZGNyY2VycgkgICA6IDE7ICAgLy8yMQoJdW5zaWduZWQgaW50IGRlbmRlcnIJICAgOiAxOyAgIC8vMjIKCXVuc2lnbmVkIGludCBpbG10ZXJyCSAgIDogMTsgICAvLzIzCgl1bnNpZ25lZCBpbnQgYWMxMmVycgkgICA6IDE7ICAgLy8yNAoJdW5zaWduZWQgaW50IGFkbWFlcnIJICAgOiAxOyAgIC8vMjUKCXVuc2lnbmVkIGludCB0dW5lX2VycgkgICA6IDE7ICAgLy8yNgoJdW5zaWduZWQgaW50IHJlc2VydmVkMQkgICA6IDE7ICAgLy8yNwoJdW5zaWduZWQgaW50IHNwaWVyciAJICAgOiAxOyAgIC8vMjgKCXVuc2lnbmVkIGludCBheGlfcmVzcF9lcnIgIDogMTsgICAvLzI5Cgl1bnNpZ25lZCBpbnQgY3BsX3RvdXRfZXJyICA6IDE7ICAgLy8zMAoJdW5zaWduZWQgaW50IGNyY19zdGF0X2VyciAgOiAxOyAgIC8vMzEKCn0gTU00X0lfU1RBVCwgKlBfTU00X0lfU1RBVCwgTU00X0lfU1RBVF9FTiwgKlBfTU00X0lfU1RBVF9FTiwgTU00X0lfU0lHTl9FTiwgKlBfTU00X0lfU0lHTl9FTjsKCiNkZWZpbmUgRElTQUJMRV9JTlRTIAkwCiNkZWZpbmUgRU5BQkxFX0lOVFMJCTEKCnR5cGVkZWYgdW5pb24KewoJTU00X0lfU1RBVCAJICBtbTRfaV9zdGF0X2JpdHM7Cgl1bnNpZ25lZCBpbnQJCSAgbW00X2lfc3RhdF92YWx1ZTsKfSBNTTRfSV9TVEFUX1VOSU9OLCAqUF9NTTRfSV9TVEFUX1VOSU9OOwoKI2RlZmluZSBDTEVBUl9JTlRTX01BU0sJCTB4RkZGRjdFRkYKCgovLyAqKioqKioqKioqKioqKioqKioqKiogTU00X0FDTUQxMl9FUiAweDNjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgp0eXBlZGVmIHN0cnVjdAp7Cgl1bnNpZ25lZCBpbnQgYWMxMm5leGUJCSAgIDogMTsgICAvLyAwCgl1bnNpZ25lZCBpbnQgYWMxMnRvZXIJCSAgIDogMTsgICAvLyAxCgl1bnNpZ25lZCBpbnQgYWMxMmNyY2VyCQkgICA6IDE7ICAgLy8gMgoJdW5zaWduZWQgaW50IGFjMTJlbmRlcgkJICAgOiAxOyAgIC8vIDMKCXVuc2lnbmVkIGludCBhYzEyaWR4ZXIJCSAgIDogMTsgICAvLyA0Cgl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQwCQkgICA6IDI7ICAgLy8gNQoJdW5zaWduZWQgaW50IGNtZG5pc3VkCQkgICA6IDE7ICAgLy8gNwoJdW5zaWduZWQgaW50IHJlc2VydmVkMQkJICAgOiA4OyAgIC8vIDgKCXVuc2lnbmVkIGludCB1aHNfbW9kZV9zZWwJICAgOiAzOyAgIC8vIDE2Cgl1bnNpZ25lZCBpbnQgc2doX3YxOF9lbiAJICAgOiAxOyAgIC8vIDE5Cgl1bnNpZ25lZCBpbnQgZHJ2X3N0cmVuZ3RoX3NlbCAgOiAyOyAgIC8vIDIwCgl1bnNpZ25lZCBpbnQgZXhlX3R1bmluZyAJICAgOiAxOyAgIC8vIDIyCgl1bnNpZ25lZCBpbnQgc2FtcGxpbmdfY2xrX3NlbCAgOiAxOyAgIC8vIDIzCgl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQyCQkgICA6IDY7ICAgLy8gMjQKCXVuc2lnbmVkIGludCBhc3luY19pbnRfZW4JICAgOiAxOyAgIC8vIDMwCgl1bnNpZ25lZCBpbnQgcHJlX3ZhbF9lbiAJICAgOiAxOyAgIC8vIDMxCgp9IE1NNF9BQ01EMTJfRVIsICpQX01NNF9BQ01EMTJfRVI7CgovLyAqKioqKioqKioqKioqKioqKioqKiogTU00X0NBUDAgMHg0MCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKdHlwZWRlZiBzdHJ1Y3QKewogdW5zaWduZWQgaW50IHRvY2xrZnJlcQkJCQk6IDY7CiB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQwCQkJCTogMTsKIHVuc2lnbmVkIGludCB0b2Nsa3VuaXQJCQkJOiAxOwogdW5zaWduZWQgaW50IGJzY2xrZnJlcQkJCQk6IDg7CiAvLwkzLzEyIFhpdWZlbmcKIC8vCXRoZSBmb2xsb3dpbmcgaXMgbm90IHNhbWUgd2l0aCBBU1BFJ3MgY29kZQogdW5zaWduZWQgaW50IG1heF9ibGtfbGVuCQkJOiAyOwogdW5zaWduZWQgaW50IGV4X2RhdGFfd2lkdGhfc3VwcG9ydAk6IDE7CiAvLwkzLzEyIFhpdWZlbmcKIC8vCW5vIHJlc2VydmVkIGJpdCBoZXJlCiAvL3Vuc2lnbmVkIGludCByZXNlcnZlZDEJCQkJOiAxOwogdW5zaWduZWQgaW50IGFkbWEyX3N1cHBvcnQJCQk6IDE7CiB1bnNpZ25lZCBpbnQgYWRtYTFfc3VwcG9ydAkJCTogMTsKIHVuc2lnbmVkIGludCBoaV9zcGVlZF9zdXBwb3J0CQk6IDE7CiB1bnNpZ25lZCBpbnQgc2RtYV9zdXBwb3J0CQkJOiAxOwogdW5zaWduZWQgaW50IHN1c19yZXNfc3VwcG9ydAkJOiAxOwogdW5zaWduZWQgaW50IHZsZ18zM19zdXBwb3J0CQk6IDE7CiB1bnNpZ25lZCBpbnQgdmxnXzMwX3N1cHBvcnQJCTogMTsKIHVuc2lnbmVkIGludCB2bGdfMThfc3VwcG9ydAkJOiAxOwogdW5zaWduZWQgaW50IHJlc2VydmVkMgkJCQk6IDE7CiB1bnNpZ25lZCBpbnQgc3lzX2J1c182NF9zdXBwb3J0CTogMTsKIHVuc2lnbmVkIGludCBhc3luY19pbnRfc3VwcG9ydAkJOiAxOwogLy8JMy8xMiBYaXVmZW5nCiAvLwljZmdfc2xvdF90eXBlIGlzIDIgYml0cyBub3cKIC8vdW5zaWduZWQgaW50IGNmZ19zbG90X3R5cGUJCQk6IDE7CiB1bnNpZ25lZCBpbnQgY2ZnX3Nsb3RfdHlwZQkJCTogMjsKfSBNTTRfQ0FQMV8yLCAqUF9NTTRfQ0FQMV8yOwoKdHlwZWRlZiB1bmlvbgp7CglNTTRfQ0FQMV8yIAkgIG1tNF9jYXAxXzJfYml0czsKCVVJTlRfVAkJICBtbTRfY2FwMV8yX3ZhbHVlOwp9IE1NNF9DQVAxXzJfVU5JT04sICpQX01NNF9DQVAxXzJfVU5JT047CgoKCi8vICoqKioqKioqKioqKioqKioqKioqKiBNTTRfU0RfTUFYX0NVUlJFTlQxXzIgMHg0OCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKdHlwZWRlZiBzdHJ1Y3QKewogdW5zaWduZWQgaW50IHYzXzN2bWF4aQkJOiA4OwogdW5zaWduZWQgaW50IHYzXzB2bWF4aQkJOiA4OwogdW5zaWduZWQgaW50IHYxXzh2bWF4aQkJOiA4OwogdW5zaWduZWQgaW50IHJlc2VydmVkMCAJOiA4Owp9IE1NNF9TRF9NQVhfQ1VSUkVOVDFfMiwgKlBfTU00X1NEX01BWF9DVVJSRU5UMV8yOwoKdHlwZWRlZiB1bmlvbgp7CglNTTRfU0RfTUFYX0NVUlJFTlQxXzIgCSAgCW1tNF9zZF9tYXhfY3VycmVudDFfMl9iaXRzOwoJVUlOVF9UCQkgIAkJCQltbTRfc2RfbWF4X2N1cnJlbnQxXzJfdmFsdWU7Cn0gTU00X1NEX01BWF9DVVJSRU5UMV8yX1VOSU9OLCAqUF9NTTRfU0RfTUFYX0NVUlJFTlQxXzJfVU5JT047CgoKCgoKLyoqKioqKioqKioqIEVuZCBNTTQgUmVnaXN0ZXIgRGVmJ3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8vIHJlc3BvbnNlIHR5cGVzCmVudW0gewogIE1NQ19SRVNQT05TRV9OT05FID0gMUw8PDgsCiAgTU1DX1JFU1BPTlNFX1IxID0gMkw8PDgsCiAgTU1DX1JFU1BPTlNFX1IxQiA9IDNMPDw4LAogIE1NQ19SRVNQT05TRV9SMiA9IDRMPDw4LAogIE1NQ19SRVNQT05TRV9SMyA9IDVMPDw4LAogIE1NQ19SRVNQT05TRV9SNCA9IDZMPDw4LAogIE1NQ19SRVNQT05TRV9SNSA9IDdMPDw4LAogIE1NQ19SRVNQT05TRV9SNUIgPSA4TDw8OCwKICBNTUNfUkVTUE9OU0VfUjYgPSA5TDw8OCwKICBNTUNfUkVTUE9OU0VfUjcgPSAweEFMPDw4LAogIE1NQ19SRVNQT05TRV9NQVNLID0gMHgwMDAwRkYwMAp9OwoKI2RlZmluZSBTRF9PQ1JfVk9MVEFHRV8zXzNfVE9fM182IAkweEUwMDAwMAojZGVmaW5lIFNEX09DUl9WT0xUQUdFXzFfOF9UT18zXzMgCTB4MUY4MDAwCiNkZWZpbmUgU0RfT0NSX1ZPTFRBR0VfMV84CQkgCTB4ODAKI2RlZmluZSBNTUNfT0NSX1ZPTFRBR0VfQUxMCQkJMHhGRjgwMDAKI2RlZmluZQlNTTRGSUZPV09SRFNJWkUJCQkJMHg4MAoKLy8gZGV2aWNlIGNvbnRleHQgZm9yIE1NQyBBUEksIGNvbnRhaW5pbmcgYW55dGhpbmcgbmVlZGVkIHRvIG9wZXJhdGUgb24KLy8gdGhpcyBBUEkuIEl0IGlzIGFsd2F5cyBmaXJzdCBwYXJhbWV0ZXIgZm9yIGFsbCBBUElzLgp0eXBlZGVmIHN0cnVjdAp7CiAgUF9NTTRfU0RNTUNfVCAgICAgICAgICAgIAlwTU1DNFJlZzsJCQkJLy8gTU1DMSByZWdpc3RlciBiYXNlCn0gTU00X1NETU1DX0NPTlRFWFRfVCwgKlBfTU00X1NETU1DX0NPTlRFWFRfVDsKCgoKCi8vI2lmZGVmIElPX0NBUkRfU1VQUE9SVAoKI2RlZmluZSBTRElPX09DUl9WT0xUQUdFXzJfMF9UT18yXzEJCTB4MDAwMTAwCiNkZWZpbmUgU0RJT19PQ1JfVk9MVEFHRV8yXzFfVE9fMl8yCQkweDAwMDIwMAojZGVmaW5lIFNESU9fT0NSX1ZPTFRBR0VfMl8yX1RPXzJfMwkJMHgwMDA0MDAKI2RlZmluZSBTRElPX09DUl9WT0xUQUdFXzJfM19UT18yXzQJCTB4MDAwODAwCiNkZWZpbmUgU0RJT19PQ1JfVk9MVEFHRV8yXzRfVE9fMl81CQkweDAwMTAwMAojZGVmaW5lIFNESU9fT0NSX1ZPTFRBR0VfMl81X1RPXzJfNgkJMHgwMDIwMDAKI2RlZmluZSBTRElPX09DUl9WT0xUQUdFXzJfNl9UT18yXzcJCTB4MDA0MDAwCiNkZWZpbmUgU0RJT19PQ1JfVk9MVEFHRV8yXzdfVE9fMl84CQkweDAwODAwMAojZGVmaW5lIFNESU9fT0NSX1ZPTFRBR0VfMl84X1RPXzJfOQkJMHgwMTAwMDAKI2RlZmluZSBTRElPX09DUl9WT0xUQUdFXzJfOV9UT18zXzAJCTB4MDIwMDAwCiNkZWZpbmUgU0RJT19PQ1JfVk9MVEFHRV8zXzBfVE9fM18xCQkweDA0MDAwMAojZGVmaW5lIFNESU9fT0NSX1ZPTFRBR0VfM18xX1RPXzNfMgkJMHgwODAwMDAKI2RlZmluZSBTRElPX09DUl9WT0xUQUdFXzNfMl9UT18zXzMJCTB4MTAwMDAwCiNkZWZpbmUgU0RJT19PQ1JfVk9MVEFHRV8zXzNfVE9fM180CQkweDIwMDAwMAojZGVmaW5lIFNESU9fT0NSX1ZPTFRBR0VfM180X1RPXzNfNQkJMHg0MDAwMDAKI2RlZmluZSBTRElPX09DUl9WT0xUQUdFXzNfNV9UT18zXzYJCTB4ODAwMDAwCiNkZWZpbmUgU0RJT19PQ1JfQUxMX1ZPTFRBR0VTCQkJMHhGRkZGRkYKCi8vI2VuZGlmCgoKCgovLyBBRE1BIGRlc2NyaXB0b3IKdHlwZWRlZiBzdHJ1Y3Qgc2Rpb19hZG1hX2Rlc2MKewoJdW5zaWduZWQgaW50IHZhbGlkIAkJOjE7Cgl1bnNpZ25lZCBpbnQgZW5kCQk6MTsKCXVuc2lnbmVkIGludCBpbnRlcnJ1cHQJOjE7Cgl1bnNpZ25lZCBpbnQgemVybwkJOjE7Cgl1bnNpZ25lZCBpbnQgYWN0MQkJOjE7Cgl1bnNpZ25lZCBpbnQgYWN0MgkJOjE7Cgl1bnNpZ25lZCBpbnQgcmVzdmVyZWQJOjEwOwoJdW5zaWduZWQgaW50IGxlbmd0aAkJOjE2OwoJdW5zaWduZWQgaW50IGFkZHI7Cn0gU0RJT19BRE1BX0RFU0MsICpTRElPX0FETUFfREVTQ19QVFI7CgojZW5kaWYJCS8vIF9fU0RNTUNfQVBJX0hfXwo=